oauth2 openid connect javascript (electron) 桌面应用程序
oauth2 openid connect javascript (electron) desktop application
桌面应用程序的正确 oauth2 流程是什么?除了桌面应用程序之外,我还有一个使用隐式流的 SPA Web GUI。在那里,如果客户端在 3600 秒后重定向到 IdP 以颁发新的访问令牌并不重要。
但桌面应用程序需要 运行 24/7 或者可以是 运行 24/7。所以它需要通过 refresh_token 自动刷新访问令牌。但是由于隐式流程不提供刷新令牌,它可能是桌面应用程序的错误流程,不是吗?
我想我需要授权代码流,它确实提供了 refresh_token。但是身份验证请求需要 redirect_uri。假设我想使用 Google 作为我的 openid 提供者。使用 google 时,我似乎无法使用自定义 URI 方案注册客户端凭据(https://developers.google.com/identity/protocols/OpenIDConnect). What does work is to register for example http://localhost:9300,理论上可以由应用程序处理。
一个
桌面应用接收 refresh_token 的正确 oauth2 流程是什么?
B
我可以在不使用隐式流 (Google IdP) 的情况下通过自定义 URI 方案捕获 redirect_uri 吗?监听自定义 uri 方案比监听本地 tcp 端口更容易。
C
这是一个比较笼统的问题。通常桌面应用程序是 public 应用程序,所以我不应该包括 client_secret 对吧?所以剩下的唯一流量就是隐式流量。但是,我如何才能根据规范更新访问令牌而不每 3600 秒打扰桌面用户呢?
就我而言,我可以在本地发布应用程序,而不是 public,但是 public 应用程序如何?
A - 授权码授予
B - 不确定,您可以 register a Custom URI Scheme
C - 提供的信息不足。
您是否正在使用 AppAuth libraries? If so you SHOULD use PKCE 并且假设客户端从不通过安全连接与 IDP 以外的任何人发送刷新令牌,则不需要为刷新令牌采取额外的安全措施。
这有帮助吗?
答:是的,使用代码授权
B:是的,使用自定义方案。在您的情况下,您应该使用客户 ID 的反面。例如com.googleusercontent.apps.123 是客户端 ID 的反向 DNS 表示法。在 Google 开发者控制台中将您的客户端注册为 "Other"。
C: 是的,它不应该包括客户机密。这就是为什么在为刷新令牌交换代码时不需要为本机客户端 ("Other") 发送密钥的原因。将该字段留空即可。
根据 jwilleke 的建议,如果 AppAuth 库适用于您的用例,请使用它,因为它还会处理一些安全问题 (PKCE)。
对于本机应用程序(桌面),您可以关注 OAuth 2.0 for Native Apps。但这仍在审查中,您可以参考提供的最新草案 link.
通过此流程,您可以使用授权代码流程来获取访问令牌和刷新令牌。刷新令牌应该可以解决扩展应用程序使用(24/7 及以后)时与用户体验相关的问题。
根据这份工作文件,对客户端身份验证有严格的指导方针。 Section 8.5 讨论一下。正如它所说,不推荐客户端凭据
For this
reason, and those stated in Section 5.3.1 of [RFC6819], it is NOT
RECOMMENDED for authorization servers to require client
authentication of public native apps clients using a shared secret
此外,正如 nvnagr 在他的回答中提到的,PKCE [RFC7636] 是本机 public 客户端的必备条件。
桌面应用程序的正确 oauth2 流程是什么?除了桌面应用程序之外,我还有一个使用隐式流的 SPA Web GUI。在那里,如果客户端在 3600 秒后重定向到 IdP 以颁发新的访问令牌并不重要。
但桌面应用程序需要 运行 24/7 或者可以是 运行 24/7。所以它需要通过 refresh_token 自动刷新访问令牌。但是由于隐式流程不提供刷新令牌,它可能是桌面应用程序的错误流程,不是吗?
我想我需要授权代码流,它确实提供了 refresh_token。但是身份验证请求需要 redirect_uri。假设我想使用 Google 作为我的 openid 提供者。使用 google 时,我似乎无法使用自定义 URI 方案注册客户端凭据(https://developers.google.com/identity/protocols/OpenIDConnect). What does work is to register for example http://localhost:9300,理论上可以由应用程序处理。
一个
桌面应用接收 refresh_token 的正确 oauth2 流程是什么?
B
我可以在不使用隐式流 (Google IdP) 的情况下通过自定义 URI 方案捕获 redirect_uri 吗?监听自定义 uri 方案比监听本地 tcp 端口更容易。
C
这是一个比较笼统的问题。通常桌面应用程序是 public 应用程序,所以我不应该包括 client_secret 对吧?所以剩下的唯一流量就是隐式流量。但是,我如何才能根据规范更新访问令牌而不每 3600 秒打扰桌面用户呢? 就我而言,我可以在本地发布应用程序,而不是 public,但是 public 应用程序如何?
A - 授权码授予
B - 不确定,您可以 register a Custom URI Scheme
C - 提供的信息不足。 您是否正在使用 AppAuth libraries? If so you SHOULD use PKCE 并且假设客户端从不通过安全连接与 IDP 以外的任何人发送刷新令牌,则不需要为刷新令牌采取额外的安全措施。
这有帮助吗?
答:是的,使用代码授权
B:是的,使用自定义方案。在您的情况下,您应该使用客户 ID 的反面。例如com.googleusercontent.apps.123 是客户端 ID 的反向 DNS 表示法。在 Google 开发者控制台中将您的客户端注册为 "Other"。
C: 是的,它不应该包括客户机密。这就是为什么在为刷新令牌交换代码时不需要为本机客户端 ("Other") 发送密钥的原因。将该字段留空即可。
根据 jwilleke 的建议,如果 AppAuth 库适用于您的用例,请使用它,因为它还会处理一些安全问题 (PKCE)。
对于本机应用程序(桌面),您可以关注 OAuth 2.0 for Native Apps。但这仍在审查中,您可以参考提供的最新草案 link.
通过此流程,您可以使用授权代码流程来获取访问令牌和刷新令牌。刷新令牌应该可以解决扩展应用程序使用(24/7 及以后)时与用户体验相关的问题。
根据这份工作文件,对客户端身份验证有严格的指导方针。 Section 8.5 讨论一下。正如它所说,不推荐客户端凭据
For this reason, and those stated in Section 5.3.1 of [RFC6819], it is NOT RECOMMENDED for authorization servers to require client authentication of public native apps clients using a shared secret
此外,正如 nvnagr 在他的回答中提到的,PKCE [RFC7636] 是本机 public 客户端的必备条件。