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

如何在Azure.Identity中通过授权码流管理令牌与刷新令牌?

关于Azure.Identity授权码流令牌复用与刷新的解决方案

针对你提出的两个问题,直接给出实操方案:

1. 无需重复提供授权码复用令牌

Azure.Identity的AuthorizationCodeCredential本身不会自动持久化令牌,需通过自定义TokenCache保存获取到的访问令牌和刷新令牌,后续初始化凭证时从缓存读取,即可避免重复提供授权码。

示例代码如下:

using Azure.Identity;
using Microsoft.Identity.Client;
using System.IO;

// 定义缓存序列化/反序列化逻辑,以本地文件存储为例
private static void SaveTokenCache(TokenCache cache)
{
    var cacheBytes = cache.SerializeMsalV3();
    File.WriteAllBytes("token_cache.bin", cacheBytes);
}

private static void LoadTokenCache(TokenCache cache)
{
    if (File.Exists("token_cache.bin"))
    {
        var cacheBytes = File.ReadAllBytes("token_cache.bin");
        cache.DeserializeMsalV3(cacheBytes);
    }
}

// 初始化凭证与Graph客户端
string[] scopes = {"User.Read"};
var tokenCache = new TokenCache();
LoadTokenCache(tokenCache);

// 首次运行传入有效授权码;后续复用缓存时,授权码参数传null
AuthorizationCodeCredential credential = new AuthorizationCodeCredential(
    tenantId,
    clientId,
    clientSecret,
    authCode, // 复用阶段传null
    new AuthorizationCodeCredentialOptions
    {
        TokenCache = tokenCache
    });

// 绑定缓存更新事件,获取令牌后自动保存
tokenCache.SetBeforeAccess(args => LoadTokenCache(args.TokenCache));
tokenCache.SetAfterAccess(args => SaveTokenCache(args.TokenCache));

GraphServiceClient graphClient = new GraphServiceClient(credential, scopes);
User me = await graphClient.Me.Request().GetAsync();

首次运行时传入授权码,令牌会被序列化到本地文件;后续运行时授权码传null,凭证会自动从缓存读取已保存的令牌完成授权。

2. 令牌过期自动刷新

只要TokenCache中保存了有效的刷新令牌,AuthorizationCodeCredential会自动处理令牌刷新逻辑,无需手动调用刷新接口。当检测到访问令牌过期时,它会自动用缓存中的刷新令牌向Azure AD请求新的访问令牌,整个过程对业务代码完全透明。

注意事项:

  • 确保TokenCache的持久化逻辑可靠,避免刷新令牌丢失
  • 刷新令牌本身存在过期时间,若长期未使用导致刷新令牌过期,才需要重新获取授权码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:10:37