gpt4 book ai didi

javascript - 具有单页应用刷新访问 token 的 Oauth2 隐式流程

转载 作者:IT王子 更新时间:2023-10-29 03:20:52 26 4
gpt4 key购买 nike

我正在使用 Thinktecture AuthorizationServer (AS),它运行良好。

我想编写一个可以直接调用 WebAPI 的原生 javascript 单页应用程序,但是隐式流不提供刷新 token 。

如果进行 AJAX 调用,如果 token 已过期,API 将发送重定向到登录页面,因为数据使用动态弹出窗口,这将打断用户。

Facebook 或 Stackoverflow 如何做到这一点并仍然允许页面上运行的 javascript 调用 API?

建议的解决方案

下面的场景听起来合理吗(假设这可以用 iframe 完成):

我的 SPA 将我定向到 AS,我通过隐式流程获得了一个 token 。在 AS 中,我单击允许 Read data 范围,然后单击 Remember decision,然后单击 Allow 按钮。

因为我点击了Remember decision 按钮,每当我点击 AS 获取 token 时,一个新的 token 会自动传回而无需我登录(我可以看到 FedAuth cookie 正在记住我的决定并相信这将使它能够正常工作)。

对于我的 SPA(不受信任的应用程序),我没有刷新 token ,只有访问 token 。所以我改为:

  1. 确保用户已登录并点击记住决定(否则 iframe 将无法工作)
  2. 调用 WebAPI,如果 401 响应尝试通过以下步骤获取新 token ...
  3. 在页面上有一个隐藏的 iframe,我将设置 URL 以从授权服务器获取新的访问 token 。
  4. 从 iframe 的哈希片段中获取新 token ,然后将其存储在 SPA 中并用于所有 future 的 WebAPI 请求。

我想如果 FedAuth cookie 被盗,我仍然会有麻烦。

上述场景有什么标准或推荐的方法吗?

最佳答案

我了解到您的问题是,当访问 token 过期时,用户将通过重定向到授权服务器的登录页面而遇到中断。但我认为您不能也不应该绕过这个问题,至少在使用隐式授权时是这样。

我相信您已经知道,implicit grant不能保密其凭据的消费者应该使用。因此,授权服务器颁发的访问 token 应具有有限的 ttl。例如,谷歌在 3600 sec 中使他们的访问 token 无效.当然你可以增加 ttl,但它永远不应该成为一个长期存在的 token 。

另外需要注意的是,在我看来,用户中断非常少,即如果实现正确,用户只需通过授权服务器进行一次身份验证。这样做之后(例如,第一次还授权应用程序访问用户控制的任何资源时)将建立 session (基于 cookie 或基于 token )并且当消费者的访问 token (使用隐式授权的网络应用程序)时expires,将通知用户 token 已过期,需要向授权服务器重新认证。但由于 session 已经建立,用户将立即被重定向回网络应用。

如果这不是您想要的,在我看来,您应该考虑使用授权代码授权,而不是使用 iframe 做复杂的事情。在这种情况下,您需要一个服务器端 Web 应用程序,因为这样您就可以保密您的凭据并使用刷新 token 。

关于javascript - 具有单页应用刷新访问 token 的 Oauth2 隐式流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23517987/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com