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

如何在基于Microsoft Identity Platform的ASP.NET Core应用中检查刷新令牌

检查ASP.NET Core应用是否获取到Microsoft Identity Platform的刷新令牌

1. 先确认配置是否满足获取刷新令牌的前提

要拿到刷新令牌,必须在请求的权限范围(scopes)中包含offline_access。你当前代码里的scopes变量需要确保包含这个值,否则Microsoft Identity Platform不会返回刷新令牌。

2. 通过OnTokenResponseReceived事件直接查看令牌响应

在你已注册的OnTokenResponseReceived事件中,可以直接读取身份平台返回的完整令牌响应,其中就包含刷新令牌(如果存在的话)。修改代码如下:

options.Events.OnTokenResponseReceived = async e =>
{
    // 直接查看响应中的refresh_token字段
    var refreshToken = e.TokenResponse.RefreshToken;
    // 调试时可以在这里打断点,或者输出到控制台
    Console.WriteLine($"刷新令牌内容: {refreshToken ?? "未获取到刷新令牌"}");
    
    // 也可以读取完整的响应体内容
    var responseContent = await new StreamReader(e.HttpResponse.ResponseStream).ReadToEndAsync();
    Console.WriteLine("完整令牌响应: " + responseContent);
    
    await Task.CompletedTask;
};

启动应用完成登录流程后,查看控制台输出或在调试器中检查refreshToken变量:如果不为空,说明已获取到刷新令牌;如果为空,说明身份平台未返回。

3. 检查分布式令牌缓存中的内容

因为你启用了AddDistributedTokenCaches(),用户的令牌(包括刷新令牌)会被存储到分布式缓存中。可以在控制器或服务中注入IDistributedCache,根据缓存键查询令牌数据:

public class TokenCheckController : Controller
{
    private readonly IDistributedCache _distributedCache;

    public TokenCheckController(IDistributedCache distributedCache)
    {
        _distributedCache = distributedCache;
    }

    public async Task<IActionResult> VerifyRefreshToken()
    {
        // 缓存键格式通常为: "Microsoft.Identity.Web.Tokens.{用户对象ID}.{租户ID}"
        var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
        var tenantId = User.FindFirstValue("http://schemas.microsoft.com/identity/claims/tenantid");
        var cacheKey = $"Microsoft.Identity.Web.Tokens.{userId}.{tenantId}";

        var tokenCacheData = await _distributedCache.GetStringAsync(cacheKey);
        if (!string.IsNullOrEmpty(tokenCacheData))
        {
            // 反序列化后查看是否包含refresh_token字段
            var tokenEntry = System.Text.Json.JsonSerializer.Deserialize<dynamic>(tokenCacheData);
            var refreshToken = tokenEntry?.RefreshToken;
            // 调试时查看refreshToken的值
        }

        return Ok();
    }
}

4. 用浏览器开发者工具抓包验证

在登录流程中,打开浏览器开发者工具的Network面板,抓取身份平台的token端点请求(地址通常是https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token),查看响应体中的refresh_token字段是否存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 14:24:54