Spring Security OAuth 2隐式授权不支持刷新令牌。当访问令牌在客户端到期时,如何处理场景?
答案 0 :(得分:7)
隐式流不会向客户端授予刷新令牌。这意味着当访问令牌过期时,客户端必须再次重定向到授权链接。
当访问令牌过期时,您将在请求受保护资源时收到401 Unauthorized(例如API方法):
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。“
“授权服务器不得发出刷新令牌。”
答案 1 :(得分:0)
我知道这个话题已经很老了,但最近我遇到了同样的问题。 在spring boot 2和spring security 5中,当springboot是你的身份验证服务器时,你将调用
?/的OAuth /授权RESPONSE_TYPE =令牌安培; CLIENT_ID =您的用户-id 再次,DefaultTokenServices.createAccessToken方法将检查您当前的令牌是否仍然有效。如果是的话,你会收到你的旧的,没有像你期望的那样精神焕发。 建议在请求中使用prompt = none参数来接收刷新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
我希望它会帮助一些人,因为我找不到更好的解决方案