Spring Security OAuth 2 隐式授权 - 不支持刷新令牌

Posted

技术标签:

【中文标题】Spring Security OAuth 2 隐式授权 - 不支持刷新令牌【英文标题】:Spring Security OAuth 2 implicit grant - No support for refresh token 【发布时间】:2013-12-01 09:25:40 【问题描述】:

Spring Security OAuth 2 隐式授权不支持刷新令牌。客户端访问令牌过期的场景如何处理?

【问题讨论】:

【参考方案1】:

隐式流程不授予客户端刷新令牌。这意味着当 Access Token 过期时,客户端必须重新重定向到授权链接。

访问令牌过期后,在请求受保护资源(例如API方法)时会收到401 Unauthorized:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="Some Realm Name", error="invalid_token",error_description="Invalid token: 12f55216-0fe0-422e-a473-356e03a3489b"
Content-Type: application/xhtml+xml;charset=UTF-8

<oauth><error_description>Invalid token: 12f55216-0fe0-422e-a473-356e03a3489b</error_description><error>invalid_token</error></oauth>

您的应用程序必须通过调用做出反应并请求新的访问令牌

/oauth/authorize?response_type=token&client_id=your-client-id

再次。

4.2. Implicit Grant

"隐式授权类型用于获取访问令牌(它不 支持刷新令牌的发行)并针对公共进行了优化 已知操作特定重定向 URI 的客户端。这些客户 通常使用脚本语言在浏览器中实现,例如 作为 javascript。”

4.2.2 Implicit Grant response

“授权服务器不得发布刷新令牌。”

【讨论】:

是否存在隐式授权流程不支持刷新令牌的原因?这是安全问题吗? 刷新令牌将暴露给公共客户端(浏览器),无需客户端身份验证即可生成新的访问令牌。 4.2.第三段The implicit grant type does not include client authentication, and relies on the presence of the resource owner and the registration of the redirection URI. Because the access token is encoded into the redirection URI, it may be exposed to the resource owner and other applications residing on the same device.【参考方案2】:

我知道这个话题很老了,但最近我遇到了同样的问题。 在spring boot 2和spring security 5中,当springboot是Your authentication server时,你会调用

/oauth/authorize?response_type=token&client_id=your-client-id 同样, DefaultTokenServices.createAccessToken 方法将检查您当前的令牌是否仍然有效。当它是时,你会收到你的旧的,不像你所期望的那样焕然一新。 建议在请求中使用 prompt=none 参数来接收 refresh ed 令牌,但我注意到 spring 不支持它。

我通过用我的 CustomTokenServices 覆盖 DefaultTokenServices 解决了这个问题。我在博客上描述了问题:

https://regulargeek.blogspot.com/2018/05/angular-5-springboot-2-oauth2-and.html

您将在我的 github 上找到示例应用程序: https://github.com/aogorek/springboot-oauth2-angular2

我希望它会帮助一些人,因为我没有找到更好的解决方案

【讨论】:

以上是关于Spring Security OAuth 2 隐式授权 - 不支持刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章

使用 spring-session 和 spring-cloud-security 时,OAuth2ClientContext (spring-security-oauth2) 不会保留在 Redis

spring-security-oauth2中的HttpSecurity配置问题

spring-security-oauth2 - 从资源服务器检查ClientDetails

社交登录,spring-security-oauth2 和 spring-security-jwt?

如何处理 spring-security-oauth2 的版本升级?

为啥spring-security-oauth oauth 2.0实现中需要scope参数