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

Spring Security OAuth 2隐式授权-不支持刷新令牌,oauth,spring-security,access-token,Oauth,Spring Security,Access Token,Spring Security OAuth 2隐式授权不支持刷新令牌。当客户端的访问令牌过期时,该场景如何处理?隐式流不会向客户端授予刷新令牌。这意味着当访问令牌过期时,客户端必须再次重定向到授权链接 当访问令牌过期时,您将在请求受保护的资源时收到401 Unauthorized(例如API方法): 再说一遍 “隐式授权类型用于获取访问令牌(不包括 支持发布刷新令牌),并针对公共 已知操作特定重定向URI的客户端。这些客户端 通常在浏览器中使用脚本语言(如 作为JavaScript。” “授

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

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

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

再说一遍

“隐式授权类型用于获取访问令牌(不包括 支持发布刷新令牌),并针对公共 已知操作特定重定向URI的客户端。这些客户端 通常在浏览器中使用脚本语言(如 作为JavaScript。”

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


我知道这个话题已经很老了,但最近我遇到了同样的问题。 在SpringBoot2和SpringSecurity5中,当springboot是您的身份验证服务器时,您将调用

/oauth/authorize?响应类型=令牌和客户端id=您的客户端id 同样,DefaultTokenServices.createAccessToken方法将检查当前令牌是否仍然有效。当它是,你会收到你的旧的,而不是刷新,因为你会期待。 建议在请求中使用prompt=none参数来接收刷新令牌,但我注意到spring不支持它

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

您将在my github上找到示例应用程序:


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

隐式授权流中不支持刷新令牌有什么原因吗?这是一个安全问题吗?刷新令牌将被公开给公共客户端(浏览器),该客户端(浏览器)可以生成新的访问令牌,而无需客户端身份验证。4.2. 第3段
隐式授权类型不包括客户端身份验证,它依赖于资源所有者的存在和重定向URI的注册。由于访问令牌被编码到重定向URI中,因此它可能会暴露给资源所有者和驻留在同一设备上的其他应用程序。
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