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

4

Spring Security OAuth 2的隐式授权不支持刷新令牌。当客户端侧的访问令牌过期时,该情况如何处理?

2个回答

8
隐式流程不授予客户端刷新令牌。这意味着当访问令牌过期时,客户端必须再次重定向到授权链接。
当访问令牌过期时,请求受保护的资源(例如API方法)时会收到401未经授权的响应。
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 隐式授权

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

4.2.2 隐式授权响应

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


刷新令牌为何不支持隐式授权流程?这是出于安全考虑吗? - benjiman
1
刷新令牌将暴露给公共客户端(浏览器),该客户端可以生成新的访问令牌而无需进行客户端身份验证。第4.2节第三段:“隐式授权类型不包括客户端身份验证,并依赖于资源所有者的存在和重定向URI的注册。由于访问令牌编码到重定向URI中,因此可能会暴露给资源所有者和驻留在同一设备上的其他应用程序。” - reifi

0

我知道这个主题很老了,但最近我也遇到了同样的问题。在Spring Boot 2和Spring Security 5中,当Spring Boot是您的身份验证服务器时,当您调用

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

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

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

你可以在我的Github上找到一个样例应用程序: https://github.com/aogorek/springboot-oauth2-angular2 希望它能帮助一些人,因为我没有找到更好的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接