如何在 Spring Boot 中实现刷新令牌
Posted
技术标签:
【中文标题】如何在 Spring Boot 中实现刷新令牌【英文标题】:How to implement refresh token in Spring Boot 【发布时间】:2018-09-27 09:08:06 【问题描述】:我已按照本指南 https://auth0.com/blog/implementing-jwt-authentication-on-spring-boot/ 在我的 Web 应用程序中实现访问令牌,它工作正常。但是,本指南没有提及刷新令牌。
谁能帮助我了解如何在 Java Spring Boot 中实现这一点?或者有没有其他方法可以让用户保持登录状态?
【问题讨论】:
按照设计,您的用户没有“登录”,因为 JWT 是无状态的。我建议在尝试使用 java、spring、nodejs 或其他方式实现 JWT 机制和目的之前充分了解它 【参考方案1】:如果你正确配置它,Spring 提供了获取新访问令牌的功能,即如果 authorizedGrantTypes
包含 "refresh_code"
。
您应该使用刷新令牌通过使用令牌端点获取新的访问令牌,如下所示:
curl -H "Authorization: Bearer [base64encode(clientId:clientSecret)]" "https://yourdomain.com/oauth/token?grant_type=refresh_token&refresh_token=[yourRefreshToken]"
示例:
curl -X POST -H 'Authorization: Basic dGVzdGNsaWVudDpzZWNyZXQ=' -d 'refresh_token=fdb8fdbecf1d03ce5e6125c067733c0d51de209c&grant_type=refresh_token' localhost:3000/oauth/token
"token_type":"bearer",
"access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiVlx1MDAxNcKbwoNUwoonbFPCu8KhwrYiLCJpYXQiOjE0NDQyNjI4NjYsImV4cCI6MTQ0NDI2Mjg4Nn0.Dww7TC-d0teDAgsmKHw7bhF2THNichsE6rVJq9xu_2s",
"expires_in":20,
"refresh_token":"7fd15938c823cf58e78019bea2af142f9449696a"
如此处所述:https://auth0.com/blog/refresh-tokens-what-are-they-and-when-to-use-them/
【讨论】:
【参考方案2】:Ref - Spring Boot + Refresh Expired JWT Implementation
一旦 JWT 过期,用户/系统将调用另一个 url,假设 /refreshtoken。与此请求一起,过期的 JWT 也应该被传递。然后,服务器将返回一个可供用户/系统使用的新 JWT。
【讨论】:
以上是关于如何在 Spring Boot 中实现刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 中实现 oAuth2 和 JWT 身份验证? [关闭]
如何在使用 Spring Boot 的 JWT 令牌时禁用同一用户帐户的多个登录
如何使用 Spring boot keycloak 适配器 + spring security 强制更新 oAuth 令牌(访问令牌 + 刷新令牌)。?