我有一个springboot
应用,该应用使用Microsoft Azure
活动目录来允许身份验证(oauth2
)。
我遵循了Microsoft(https://docs.microsoft.com/en-us/java/azure/spring-framework/configure-spring-boot-starter-java-app-with-azure-active-directory?view=azure-java-stable)提供的“操作方法”。
一切正常,除了我不知道如何处理过期令牌(1小时后)而不会影响用户。
我知道可以使用带有刷新令牌的新令牌,但是如果我查看NimbusAuthorizationCodeTokenResponseClient.java
,即使可用,刷新令牌也不会保存在任何地方。
我找不到任何有关如何保留此刷新令牌以及如何使用它的示例,就像它应该像整个过程一样自动工作一样。
有人可以对此Azure Active Directory Spring Boot模块有任何经验吗?
我将Springboot 2.0.4
与azure spring boot module 2.0.5
一起使用
答案 0 :(得分:0)
您的access_token将由refresh_token自动刷新。
但是,当您的refresh_token令牌过期时,您仍然会遇到相同的错误。要处理该问题,您可以在获取新的access_token的同时自动使refresh_token更新。在身份验证服务器代码的AuthorizationServerEndpointsConfigurer的配置中使用复用RefreshTokens(false):
看看DefaultTokenServices类中的refreshAccessToken方法:
public OAuth2AccessToken refreshAccessToken(String refreshTokenValue,
TokenRequest tokenRequest) {
// Omitted
if (!reuseRefreshToken) {
tokenStore.removeRefreshToken(refreshToken);
refreshToken = createRefreshToken(authentication);
}
// Omitted
}
您应该以某种方式将reuseRefreshToken标志设置为false。您可以在AuthorizationServerConfigurerAdapter实现中做到这一点:
@Configuration
@EnableAuthorizationServer
public class AuthorizationServer extends AuthorizationServerConfigurerAdapter {
// Other methods
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints
.reuseRefreshTokens(false);
}
}