Spring Security OAuth 2的隐式授权不支持刷新令牌。当客户端侧的访问令牌过期时,该情况如何处理?
Spring Security OAuth 2的隐式授权不支持刷新令牌。当客户端侧的访问令牌过期时,该情况如何处理?
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
再次翻译如下:
“隐式授权类型用于获取访问令牌(不支持发放刷新令牌),并且对已知使用特定重定向 URI 的公共客户端进行了优化。这些客户端通常使用脚本语言(如 JavaScript)在浏览器中实现。”
“授权服务器不得发放刷新令牌。”
我知道这个主题很老了,但最近我也遇到了同样的问题。在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 希望它能帮助一些人,因为我没有找到更好的解决方案。