【问题标题】:How can you implement refresh tokens in a web app - angularjs如何在 Web 应用程序中实现刷新令牌 - angularjs
【发布时间】:2016-06-26 12:29:44
【问题描述】:

我在我的网络应用程序中使用基于令牌的安全性。服务器端是使用 c# 编写的,我使用 openiddict 登录和发布令牌,发现 here。我正在使用隐式流。

默认情况下,我的令牌的有效期为 1 小时,之后您必须再次登录。我已将我的 API 锁定为仅接受不记名令牌而不接受 cookie。

我想实现刷新令牌,但在阅读了许多网站之后,似乎在网络应用程序上实现刷新令牌并不是一个好方法,因为黑客获取了刷新令牌。我知道要使用刷新令牌,您必须使用代码流,而不是隐含,我可以这样做。

人们如何在他们的网络应用中解决这种情况?我不能是唯一一个希望令牌在 Web 应用程序中持续超过一个小时的人吗?

【问题讨论】:

    标签: angularjs oauth-2.0 openid-connect aspnet-contrib openiddict


    【解决方案1】:

    OpenID Connect 推荐的方法是在隐藏帧中发送授权请求,其参数与您用于初始隐式流请求的参数相同,加上prompt=none 和可选的@ 987654323@ 对应于您从授权响应中提取的id_token

    当使用prompt=none 时,身份提供者不会显示任何同意表单,而是直接将用户代理重定向到您指定的redirect_uri,并将新令牌附加到 URI 片段,就像经典的隐式流量请求。您可以通过从popup.location.hash 属性中提取它来检索它。

    如果无法处理请求(无效请求、未经身份验证的用户、无效id_token_hint、需要同意等),则会返回错误,并且身份提供者将用户代理重定向到 redirect_uri 并带有 @987654330 @参数或停止处理请求。

    请注意,由于相同的来源策略,如果当前位置属于不同的域(例如,如果身份提供者拒绝将用户代理重定向到您的客户端应用程序),您将无法访问 popup.location.hash:它会抛出拒绝访问异常。在这种情况下,最好为“刷新”操作添加超时。

    遗憾的是,很少有库可以帮助您完成这项任务。 oidc-token-manager 就是其中之一,但它有一些限制将阻止它与 OpenIddict 一起使用 OTB:它不支持原始 RSA 密钥(您必须在 OpenIddict 选项中明确使用 X509 证书)并且它不支持t 在发送prompt=none 请求时发送OpenIddict 所需的id_token_hint 参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-20
      • 1970-01-01
      • 1970-01-01
      • 2019-06-29
      • 2018-09-27
      • 2021-11-23
      • 2020-12-12
      • 1970-01-01
      相关资源
      最近更新 更多