gpt4 book ai didi

oauth-2.0 - Spring OAuth2 : Validity Period of RefreshTokens is not renewed

转载 作者:行者123 更新时间:2023-12-04 21:07:05 28 4
gpt4 key购买 nike

我正在使用 资源所有者密码授予 spring-security-oauth 在后端。代币是 智威汤逊 .

我想要短期访问 token (比如 2 分钟)但长期刷新 token (比如每小时)。

据我了解,首次登录后,访问 token 的有效期应为 2 分钟,刷新 token 的有效期为 1 小时。那就是。但就是这样。
当我刷新 token 时,有效性保持不变。似乎密码授权的原始到期仍然有效,并且刷新被某种忽略。确实我得到了一个新 token ,但到期时间与密码授予相同。

    @Bean
@Primary
public DefaultTokenServices tokenServices() {
DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
defaultTokenServices.setTokenStore(tokenStore());
defaultTokenServices.setSupportRefreshToken(true);
defaultTokenServices.setReuseRefreshToken(false);

// 2 minutes defaultTokenServices.setAccessTokenValiditySeconds(this.accessTokenValiditySeconds);
// 1 hour defaultTokenServices.setRefreshTokenValiditySeconds(this.refreshTokenValiditySeconds);
return defaultTokenServices;
}

使用密码流程登录
curl -v -u my-trusted-client:secret -d 'grant_type=password&username=XXX&password=$PASS' http://$AUTH_HOST:$AUTH_PORT/$AUTH_CONTEXT/oauth/token

返回类似的东西:
{"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiYXV0aDItcmVzb3VyY2UiXSwidXNlcl9uYW1lIjoibXIubmlnZ3VAZ21haWwuY29tIiwic2NvcGUiOlsicmVhZCIsIndyaXRlIiwid2hhdGVydmVyIl0sInVzZXJOYW1lRnJvbVVzZXIiOiJtci5uaWdndUBnbWFpbC5jb20iLCJleHAiOjE0ODk2NzkyMDMsImF1dGhvcml0aWVzIjpbIlJPTEVfQURNSU4iXSwianRpIjoiMDFlZmZiNjEtYzFjMy00ZWExLWEwNWEtNGUyYWM3ZTViMDVmIiwiY2xpZW50X2lkIjoibXktdHJ1c3RlZC1jbGllbnQifQ.fsab4mAi3eik5Yd82v3l_EZ1CB75ppZPrSKp8pcg3WA","token_type":"bearer","refresh_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiYXV0aDItcmVzb3VyY2UiXSwidXNlcl9uYW1lIjoibXIubmlnZ3VAZ21haWwuY29tIiwic2NvcGUiOlsicmVhZCIsIndyaXRlIiwid2hhdGVydmVyIl0sInVzZXJOYW1lRnJvbVVzZXIiOiJtci5uaWdndUBnbWFpbC5jb20iLCJhdGkiOiIwMWVmZmI2MS1jMWMzLTRlYTEtYTA1YS00ZTJhYzdlNWIwNWYiLCJleHAiOjE0ODk2ODI2NjMsImF1dGhvcml0aWVzIjpbIlJPTEVfQURNSU4iXSwianRpIjoiMTQwMDIyMWItN2ViYS00ZTBmLWE3YzEtZjc1ZTdiMzk2Y2FjIiwiY2xpZW50X2lkIjoibXktdHJ1c3RlZC1jbGllbnQifQ.d_jGAEPjXyIsh-sJguOAET-9xxTGx6YJ5Fgu_13RudI","expires_in":119,"scope":"read write whaterver","userNameFromUser":"mr.niggu@gmail.com","jti":"01effb61-c1c3-4ea1-a05a-4e2ac7e5b05f"}

我收到一个有效的 token ,正如我预期的那样,访问 token 的有效期为 2 分钟,刷新为一个小时。

解码后的刷新 token
{
"aud": [
"auth2-resource"
],
"user_name": "XXX",
"scope": [
"read",
"write",
"whaterver"
],
"userNameFromUser": "XXX",
"ati": "01effb61-c1c3-4ea1-a05a-4e2ac7e5b05f",
"exp": 1489682663,
"authorities": [
"ROLE_ADMIN"
],
"jti": "1400221b-7eba-4e0f-a7c1-f75e7b396cac",
"client_id": "my-trusted-client"
}

当我使用刷新 token 刷新时说 1 分钟后
curl -v -u my-trusted-client:secret -d "grant_type=refresh_token&client_id=my-trusted-client&refresh_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiYXV0aDItcmVzb3VyY2UiXSwidXNlcl9uYW1lIjoibXIubmlnZ3VAZ21haWwuY29tIiwic2NvcGUiOlsicmVhZCIsIndyaXRlIiwid2hhdGVydmVyIl0sInVzZXJOYW1lRnJvbVVzZXIiOiJtci5uaWdndUBnbWFpbC5jb20iLCJhdGkiOiIwMWVmZmI2MS1jMWMzLTRlYTEtYTA1YS00ZTJhYzdlNWIwNWYiLCJleHAiOjE0ODk2ODI2NjMsImF1dGhvcml0aWVzIjpbIlJPTEVfQURNSU4iXSwianRpIjoiMTQwMDIyMWItN2ViYS00ZTBmLWE3YzEtZjc1ZTdiMzk2Y2FjIiwiY2xpZW50X2lkIjoibXktdHJ1c3RlZC1jbGllbnQifQ.d_jGAEPjXyIsh-sJguOAET-9xxTGx6YJ5Fgu_13RudI"  http://$AUTH_HOST:$AUTH_PORT/$AUTH_CONTEXT/oauth/token

我收到一个新的有效访问和刷新 token
{"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiYXV0aDItcmVzb3VyY2UiXSwidXNlcl9uYW1lIjoibXIubmlnZ3VAZ21haWwuY29tIiwic2NvcGUiOlsicmVhZCIsIndyaXRlIiwid2hhdGVydmVyIl0sInVzZXJOYW1lRnJvbVVzZXIiOiJtci5uaWdndUBnbWFpbC5jb20iLCJleHAiOjE0ODk2NzkyMjEsImF1dGhvcml0aWVzIjpbIlJPTEVfQURNSU4iXSwianRpIjoiMmQ3NTRiZmQtNWY3Ni00NDA0LTk2ZDAtMTIwNTM2ZDQyYWM4IiwiY2xpZW50X2lkIjoibXktdHJ1c3RlZC1jbGllbnQifQ.lBJ_-qi4ZS2sCcJAnTK-ydDFwqxgLN88jhSx5nvFJHY","token_type":"bearer","refresh_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiYXV0aDItcmVzb3VyY2UiXSwidXNlcl9uYW1lIjoibXIubmlnZ3VAZ21haWwuY29tIiwic2NvcGUiOlsicmVhZCIsIndyaXRlIiwid2hhdGVydmVyIl0sInVzZXJOYW1lRnJvbVVzZXIiOiJtci5uaWdndUBnbWFpbC5jb20iLCJhdGkiOiIyZDc1NGJmZC01Zjc2LTQ0MDQtOTZkMC0xMjA1MzZkNDJhYzgiLCJleHAiOjE0ODk2ODI2NjMsImF1dGhvcml0aWVzIjpbIlJPTEVfQURNSU4iXSwianRpIjoiMTQwMDIyMWItN2ViYS00ZTBmLWE3YzEtZjc1ZTdiMzk2Y2FjIiwiY2xpZW50X2lkIjoibXktdHJ1c3RlZC1jbGllbnQifQ.ximnk1WW9WBx4TW3WuQyNMbgZlUXlMHC6k9Hdjy_-4A","expires_in":119,"scope":"read write whaterver","userNameFromUser":"XXX","jti":"2d754bfd-5f76-4404-96d0-120536d42ac8"}

解码后的新访问 token 与第一个具有相同的 exp:
{
"aud": [
"auth2-resource"
],
"user_name": "XXX",
"scope": [
"read",
"write",
"whaterver"
],
"userNameFromUser": "XXX",
"ati": "2d754bfd-5f76-4404-96d0-120536d42ac8",
"exp": 1489682663,
"authorities": [
"ROLE_ADMIN"
],
"jti": "1400221b-7eba-4e0f-a7c1-f75e7b396cac",
"client_id": "my-trusted-client"
}

但是访问 token 现在即将在下一分钟过期 我希望它从刷新发生的那一刻起再有效 2 分钟。

正如你在刷新 token 的exp中看到的那样,刷新后是一样的。访问 token 并非如此。

我以为我可以为刷新 token 设置大约 2 分钟的到期时间,每次刷新我都会再有 2 分钟。但事实并非如此。

我希望用户只在登录时提供他的凭据,然后只要他正在工作(并在后台刷新 token ),他就不应该被迫再次登录。但目前情况并非如此。因为他是在最后一次成功刷新 token 加上访问 token 到期后注销的。

我错过了什么吗?怎么了?欢迎任何帮助或建议。提前谢谢。

最佳答案

好的,我可以看到您将 DefaultTokenServices 的重用RefreshToken 标志设置为 false,但是您实际上在授权服务器中使用了这个 bean 吗?我敢打赌你不会,这就是刷新 token 的有效期没有更新的原因。为了在授权服务器中使用这个 bean,你必须在 AuthorizationServerEndpointsConfigurer 中专门声明它,如下所示:

public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { 
endpoints.tokenServices(youTokenServicesBean)
}

否则授权服务器端会使用 AuthorizationServerEndpointsConfigurer 创建的 DefaultTokenServices 实例,这在大多数情况下就足够了。
因此,在这种情况下,为了配置 AuthorizationTokenServices 以更新 token 的有效期,您只需添加:
public void configure(AuthorizationServerEndpointsConfigurer endpoints) 
throws Exception {
endpoints.reuseRefreshTokens(false);
}

关于oauth-2.0 - Spring OAuth2 : Validity Period of RefreshTokens is not renewed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42839381/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com