You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Web应用中如何自动刷新Azure AD访问令牌?基于Microsoft Graph

自动处理Microsoft Graph令牌刷新的实现方案

你可以借助Azure Identity库中的RefreshTokenCredential类实现令牌自动刷新,无需手动触发刷新逻辑。这个组件会在Access Token过期时,自动使用已存储的Refresh Token向Microsoft身份服务请求新的Access Token,同时可捕获刷新后的令牌信息更新本地存储。

具体实现步骤

1. 添加依赖

确保项目引入Azure Identity库(以Maven为例):

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-identity</artifactId>
    <version>1.12.0</version> <!-- 建议使用最新稳定版本 -->
</dependency>

2. 替换TokenCredential实现

抛弃当前手动返回固定令牌的TokenCredential,改用RefreshTokenCredential构建认证提供者:

// 从本地存储读取已保存的Refresh Token和应用客户端ID
String storedRefreshToken = account.getRefreshToken();
String clientId = "你的Microsoft应用客户端ID";

// 构建自动刷新的凭证实例
RefreshTokenCredential refreshTokenCredential = new RefreshTokenCredentialBuilder()
    .clientId(clientId)
    .refreshToken(storedRefreshToken)
    .build();

// 初始化GraphServiceClient
TokenCredentialAuthProvider authProvider = new TokenCredentialAuthProvider(refreshTokenCredential);
this.graphServiceClient = GraphServiceClient.builder()
    .authenticationProvider(authProvider)
    .buildClient();

3. 更新本地存储的令牌(可选但必要)

当令牌自动刷新后,需要将新的Access Token、过期时间和Refresh Token更新到本地存储,避免下次使用旧令牌:

// 注册令牌刷新回调
refreshTokenCredential.addTokenRefreshCallback(tokenContext -> {
    AccessToken newAccessToken = tokenContext.getAccessToken();
    String newRefreshToken = tokenContext.getRefreshToken();
    
    // 更新account对象的令牌信息
    account.setAccessToken(newAccessToken.getToken());
    account.setTokenExpiry(Date.from(newAccessToken.getExpiresAt().toInstant()));
    account.setRefreshToken(newRefreshToken);
    
    // 这里添加持久化逻辑,比如保存到数据库或缓存
});

注意事项

  • 登录时必须请求offline_access权限,否则无法获取具备刷新能力的Refresh Token。
  • 如果Refresh Token本身过期(通常有效期为90天),RefreshTokenCredential会抛出AuthenticationException,此时需要引导用户重新完成登录流程。
  • 确保应用客户端ID与登录时使用的一致,否则刷新请求会被拒绝。

内容的提问来源于stack exchange,提问作者Petre Popescu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 02:35:23