Spring 6 OAuth 2.0 - 无刷新令牌 | PKCE 公共客户端

问题描述 投票:0回答:1

编辑

我在 StackOverflow 上找到了有关此主题的更多信息:

PKCE 公共客户端 - 无刷新令牌

他们说,公共 pkce 客户端没有任何可用的刷新令牌。

所以我必须将用户时间重定向到身份验证服务器以生成新的身份验证代码以生成新的access_token。


我在 Spring 6 Spring Boot 3 中遇到了 OAuth 2.0 服务器问题。

我构建了一个 AuthServer 和一个 ResourceServer。

使用我的 JS 客户端,我可以登录,获取授权代码,然后我可以用此代码交换访问令牌,这里开始了困境。

我得到一个 json-obj :

访问令牌 范围 id_token 令牌类型 过期时间

access_token: "eyJraWQiOiI5NWE0MTU3Mi1iNDYxLTQ0NDctYjZkNy00MTg2ZWY0NTE1OTciLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJiZW4iLCJhdWQiOiJjbGllbnQiLCJuYmYiOjE3MjkxNTMxMzQsInNjb3BlIjpbInVzZXIucmVhZCIsIm9wZW5pZCIsIm9mZmxpbmVfYWNjZXNzIl0sImlzcyI6Imh0dHA6Ly8xMjcuMC4wLjE6ODA4MCIsImV4cCI6MTcyOTE1MzQzNCwiaWF0IjoxNzI5MTUzMTM0LCJqdGkiOiI4MTIzZjI5Ni0zNTE5LTQwOTgtYWU2NS1hN2FmMDhhMGE0NTIifQ.Y-FGu2CvwC3j3_w2QfF4UMDN8GekXdhGH2F_KVxaCxlJgx5tlcf-XTsN6396R5SZr4qGOGs3eeBi5CL6nJPIcfk92uju1N1KgzsbsHpIcWZZANO2QRbBaCIXn0mO2nxHOWR8N77R5m_ST2bhXOP8vLmM68Q1I3-NzOEkQM9X8mSi8ve3JBOHGVjD1pyyyinxLtNpFdnJVVexnnmDHRBOpEaivqBi3mSWN6lfLovOTqUsAVVKPtMjuaxHFFmvfeSHp328w-JuGTsVd4Irisc2UF44bZ2fRG0vSTVWFVODemvanwkfurJ-8GhPbnvnsxhCDhw-UQ-iLkwFXcOmjhAD6Q"
​
expires_in: 299
​
id_token: "eyJraWQiOiI5NWE0MTU3Mi1iNDYxLTQ0NDctYjZkNy00MTg2ZWY0NTE1OTciLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJiZW4iLCJhdWQiOiJjbGllbnQiLCJhenAiOiJjbGllbnQiLCJhdXRoX3RpbWUiOjE3MjkxNTMxMzMsImlzcyI6Imh0dHA6Ly8xMjcuMC4wLjE6ODA4MCIsImV4cCI6MTcyOTE1NDkzNCwiaWF0IjoxNzI5MTUzMTM0LCJqdGkiOiIxZjVlNzI4NC01ZjcyLTQxZmEtYWE4MS1kOTkwMGZjYjg1YmEiLCJzaWQiOiJMVUpCYlU1OWgxa290NGRsWmxadFJOZk96dE5QaEFOQWdQbWw0a2RLdWlNIn0.VqqlS1J1zLL79PVvvKujJOMDIKJkZQtzgspLYDZlM7FXZk2q02xFYrUE1X2YIg_5aAR2KDYspHlcpXarnxr6CQPNmjDdzqdYBsoehnXYJYkpw9tdmqy3qCkkywtaRrTwNxryFgAyJ6wl2bf_2nZpny2WIItTa2YFsahpZ3tTc6ezka4Nd5_aWQnlgl2fcRhNY_HPyLSDpoXtjlYX-IUNIr9ghoMPCU5koDzHQ1tUIbcZQevoJx84RXinjfIJJmIosBgdrGun0Z847OeE0Fw3YmNN5gC8CBT-8Rab5Irmsz5msF2P3ixMNBK9uilVhfhSbEzMTuA_rXnEhz4zq7zXiA"
​
scope: "user.read openid offline_access"
​
token_type: "Bearer"

没有任何refresh_token,但根据指南,应该有这个Token与其余的一起。

所以我在 300 秒后无法获得新的 access_token。并且刷新浏览器 5 分钟是不可能的。

也许有人遇到同样的问题并解决它并可以帮助我吗?

我尝试按照官方指南,观看YouTube并询问AI。

我将offline_access 范围和refresh_token 授予类型包含到application.properties 中。

spring.application.name=authorizationserver
server.port=8080

spring.security.oauth2.authorizationserver.client.client-1.registration.client-id=client
#spring.security.oauth2.authorizationserver.client.client-1.registration.client-secret={bcrypt}$2a$12$qew6z2l8LLQQeTRxqZekHOlT0jPtyrosuHtskyQBZiFOUaxXAgpIC
#spring.security.oauth2.authorizationserver.client.client-1.registration.client-authentication-methods=client_secret_basic
spring.security.oauth2.authorizationserver.client.client-1.registration.client-authentication-methods=none
spring.security.oauth2.authorizationserver.client.client-1.registration.authorization-grant-types=authorization_code,refresh_token
#spring.security.oauth2.authorizationserver.client.client-1.registration.redirect-uris=http://127.0.0.1:8082/login/oauth2/code/spring
spring.security.oauth2.authorizationserver.client.client-1.registration.redirect-uris=http://127.0.0.1:5173/callback

# not working wether with or without client.client-1
spring.security.oauth2.authorizationserver.client.client-1.token.refresh-token.enabled=true

spring.security.oauth2.authorizationserver.client.client-1.registration.scopes=user.read,user.write,openid,offline_access
spring.security.oauth2.authorizationserver.client.client-1.require-authorization-consent=true
logging.level.org.springframework.security=DEBUG

看来这个问题不是很常见,因为我找不到任何解决方案。

java spring spring-boot oauth oauth-refresh-token
1个回答
0
投票

您似乎正在为 OAuth 设置应用程序,但我没有看到任何颁发者信息。实际令牌的发行者将生成刷新令牌。 Spring 只是方便跟踪刷新令牌并获取新令牌。您要查找的内容必须查看令牌发行者文档,无论是 Github、Google、Azure...如果您还输入发行者名称和配置,这可能会有所帮助

如果您在 spring security 的文档中查看此处,它会设置一个客户端以在需要时进行其余调用以获取刷新令牌 您似乎正在为 OAuth 设置应用程序,但我没有看到任何颁发者信息。实际令牌的发行者将生成刷新令牌。 Spring 只是方便跟踪刷新令牌并获取新令牌。您要查找的内容必须查看令牌发行者文档,无论是 Github、Google、Azure...如果您还输入发行者名称和配置,这可能会有所帮助。

如果您在 spring security 文档中查看此处,它会设置一个客户端以在需要时进行其余调用以获取刷新令牌 docs.spring.io/spring-security/reference/servlet/oauth2/client/...

© www.soinside.com 2019 - 2024. All rights reserved.