带有Springboot的Azure Active Directory:如何处理过期的oauth令牌?

时间:2018-09-05 12:01:50

标签: spring-boot azure-active-directory spring-security-oauth2

我有一个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.4azure spring boot module 2.0.5一起使用

1 个答案:

答案 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);
    }
}