【问题标题】:What redirect URI should I use for an authorization call used in an Electron app?我应该为 Electron 应用程序中使用的授权调用使用什么重定向 URI?
【发布时间】:2020-10-27 04:42:46
【问题描述】:

我有一个基于示例启动项目的基本 Electron 应用程序,没有什么特别之处。

对于我的主窗口,我将 URL 作为 GET 请求加载到 API 端点

loginWindow.loadURL('https://apiwebsite.com/api/v1.0/authorize?secret_id=my_secret&redirect_uri=<???????>')

作为对这个 API 端点的 GET 请求的一部分,我必须发送一个返回 URI。这实际上工作正常,因为我可以让 API 返回并加载我指定的 URI。但是我不知道要指定什么 URI 才能让它返回到我的应用程序中的某个地方,我可以在其中读取响应并继续。

我习惯于 Web 开发,但 Electron 对我来说是新手。在这种情况下,我不遵循如何提交返回 URI。那会是什么?本地开发与打包应用程序相比会发生变化吗?

有没有更好的方法来做到这一点?

【问题讨论】:

  • 谢谢@charlietfl,这确实让我找到了正确的答案。如果您想发布实际答案,我可以将其标记为已接受,否则我可以这样做。
  • 所以这对我来说是新的。真的像注册自定义协议一样简单吗?如果可以的话很方便
  • 是的,它确实有效。从外部 URL 返回到我的自定义协议,我可以在其中读取响应并保存它,现在我只需对我的渲染过程进行 IPC 身份验证,并开始使用 m 令牌来检索数据。
  • @Twentyonehundred:您能否提供自定义协议设置的代码示例?我正在按照电子 registerFileProtocol 示例来完成您打算做的相同事情,但是我试图从中获取密钥的网站一直说:“未能启动 [awesomeProtocol://example] 因为该方案没有一个注册的处理程序”。

标签: javascript oauth-2.0 electron


【解决方案1】:

桌面应用程序的 OAUTH

OAuth for desktop apps 推荐这两种关键行为:

  • 通过系统浏览器登录,让您的应用永远不会看到用户凭据
  • 使用授权代码流 (PKCE),因为您的应用是公共客户端

这通常会导致以下解决方案之一:

  • 基于环回的重定向 URI,例如 http://127.0.0.1:8000/callback
  • 基于私有 URI 方案的重定向 URI,例如 x-mycompany-desktopapp:/callback

正如您所发现的,除非您使用较旧(已弃用)的 Web 视图解决方案,否则基于 HTTP 的标准 Internet 重定向 URL 不适用于桌面应用程序。

我的资源

虽然我的博客有几个 Electron 代码示例,但您可以轻松地在本地 PC 上运行这些代码示例,以查看这两种解决方案的效果,但实现流程很棘手:

我的示例很深,但希望其中一些对您自己的解决方案有用...

【讨论】:

  • 我正在尝试遵循您的私有 URI 方案解决方案,但我不清楚如何指定私有 URI 或将其链接到应用程序
  • 啊 - 看看interstitial web page,它在登录完成后调用私有 URI 方案。这不是强制性的,您可以直接在桌面应用程序的配置文件中使用私有 URI 方案,但它可以防止剩余的空白浏览器页面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-10
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
相关资源
最近更新 更多