Angular 5 在 Electron 中使用 Okta 进行身份验证

Angular 5 authentication with Okta in Electron

我正在尝试配置我的 angular 应用程序身份验证部分,但由于我正在从 html 加载我的 angular 应用程序,所以我无法使其在 Electron 内部工作文件而不是将其加载到本地服务器中。解决这个问题的最佳方法是什么?我正在为此任务使用 angular-oauth2-oidc 库,当我在浏览器上直接使用 ng serve 启动 angular 应用程序时,身份验证工作正常,因为重定向 url设置为 localhost:4200,但对于 Electron,它不起作用,因为它不托管在本地服务器上。

如果您使用的是 Electron,我建议根据 Auth0 web site 为桌面应用程序使用正确的 OAuth 流程,即 'Authorization Code (PKCE)'.

您的 Angular OIDC 库适用于单页应用程序,它使用称为 'Implicit Flow'.

的不同解决方案

桌面应用程序的技术是在系统浏览器上触发登录,但这很棘手,而且工作量可能超出您的预期。

有一个 Electron AppAuth Sample 可以进行桌面登录:

  • 在用户登录期间,可以切换到系统浏览器
  • 登录完成后桌面应用会收到通知
  • 通知通过环回接口私有URI方案

我一直在写一篇关于 OAuth 技术的非常详细的博客,您可能想浏览一下:它包括一些关于 Desktop Logins 的注释。

如果您替换默认的 NodeBasedHandler,则可以使用新的 Electron Window- 参见 This Code from StupidUglyFool - 他是个聪明人,发布了一些好东西东西。

电子WINDOW 登录问题

我也开始走那条路 - 它会起作用,但 Electron Window 实际上是一个带有私人浏览器会话的 Web 视图,你会遇到这些问题:

  • 用户登录时密码自动填充将不起作用
  • 跨多个桌面应用程序的单点登录将不起作用

从安全方面来说,通过 Electron Windows 登录也不被认为是正确的 - Google 等一些提供商将阻止登录。

系统浏览器登录

如果您有兴趣,我在 GitHub 上提供了一些示例,可能会对您有所帮助:

它们都替换了 desktopapp/src/plumbing 下的 NodeBasedHandler,因此您可以借鉴它们的想法。还有两个代码示例 link 以及一些屏幕截图等

NONE个选项完美

遗憾的是,没有任何选项是完美的,您需要根据可用性/安全性/复杂性之间的权衡做出自己的选择。