oauth-2.0 - 在 OAuth2 隐式授权中处理过期的访问 token

标签 oauth-2.0 single-sign-on single-page-application restful-authentication

OAuth2 规范规定授权服务器在使用隐式授权时不得发出刷新 token 。在我们的用例中,我们使用 OAuth2 保护 RESTful API,并使用单页 Javascript 应用程序作为该 API 的客户端。由于访问 token 过期后很难重定向到授权服务器,因此我们正在寻找一种更好的方法来获取新的有效 token 。我可以考虑两种不同的方法,并想知道哪一种更好:

  • 使用隐藏的 iframe 重新请求有效的访问 token 。为此,有必要包含一个像“prompt=none”这样的参数,它告诉 OAuth 提供者既不要质疑身份验证,也不要显示授权页面。如果用户已通过身份验证并已授权应用程序,则服务器将在 urls # 参数中发回访问 token 。如果不满足上述条件之一,它将重定向并出现类似 #error=authentication%20lost 的错误。通过这种行为,我们也可以将短期访问 token 与隐式流一起使用。
  • 我们可以使用一个额外的范围(例如离线)来告诉服务器分发一个刷新 token 。即使原始规范说隐式流不会发出刷新 token (如果客户端仅将 OAuth 用于首次授权,这是正确的),您可以自由地为您的特定应用程序定义自己的范围。您应该考虑只允许来自知名客户端的此范围。

  • 这两种方法都与 OpenID Connect 的方法非常相似。不幸的是,目前 OpenID Connect 的实现并不多。所以第一步是扩展 OAuth2 服务器,直到 OIC 更受欢迎。

    那么应该首选哪种方法呢?

    编辑 : token 端点需要客户端身份验证,这仅适用于服务器端应用程序等 secret 客户端。使用第二种方法,在我们的例子中,只有资源提供者才能让 RESTful API 刷新 token 并将其发送回客户端。我认为这将是一个安全风险。所以可能我们只有一种有效的方法。

    最佳答案

    来自 OAuth0 website :

    If you need to authenticate your users without a login page (for example, when the user is already logged in via SSO scenario) or get a new access_token (thus simulate refreshing an expired token), you can use Silent Authentication.



    至于Silent Authentication :

    However, redirecting users away from your application is usually considered disruptive and should be avoided, from a UX perspective. Silent authentication lets you perform an authentication flow where Auth0 will only reply with redirects, and never with a login page.



    这将允许您使用 SSO token 重新登录用户,而无需再次提示他输入凭据。

    关于oauth-2.0 - 在 OAuth2 隐式授权中处理过期的访问 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24881802/

    相关文章:

    c# - [C#、.NET] : Validating users via LDAP through IdentityServer3

    java - 单一注销不适用于 Shibboleth IdP

    google-analytics - 使用 GA4 和 NextJS 获取冗余的页面浏览事件

    typescript - 如何覆盖 Aurelia ViewModel 分辨率?

    php - facebook验证码使用coldfusion出错

    oauth-2.0 - 使用 Google+ 登录时从我的网页显示 Android 应用程序安装的选项

    oauth-2.0 - 调用未定义的方法 Laravel\Lumen\Routing\Router::dispatch()

    java - IVR 与厂商IVR 系统集成 |单点登录实现

    EC2 上的 Tomcat 丢失了 cookie

    javascript - 如何在浏览器中推迟代码评估?