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

.NET Web应用中AddMicrosoftIdentityWebAppAuthentication刷新令牌未自动触发问题

问题描述

我的.NET Web应用中配置了以下认证代码:

services.AddMicrosoftIdentityWebAppAuthentication(Configuration)
           .EnableTokenAcquisitionToCallDownstreamApi()
           .AddMicrosoftGraph()
           .AddInMemoryTokenCaches();

并在appsettings.json中配置了AzureAD相关信息:

"AzureAd": {
  "Instance": "https://login.microsoftonline.com/",
  "Domain": "****************",
  "ClientId": "****************",
  "TenantId": "****************",
  "ClientSecret": "****************",
  "CallbackPath": "/signin-oidc",
  "SignedOutCallbackPath ": "/signout-callback-oidc",
  "Authority": "https://login.microsoftonline.com/****************,
  "ResponseType": "code",
  "UsePkce": true,
  "Scopes": "**************** ,
  "TokenValidationParameters": {
    "NameClaimType": "name",
    "RoleClaimType": "roles"
  },
  "TokenAcquisitionOptions": {
    "RefreshBuffer": 120,
    "ForceRefreshOnExpiration": true
  }
},

我通过上述配置获取Access Token调用Microsoft Graph API,但一小时后令牌过期时,系统未自动使用Refresh Token获取新令牌。请问该刷新逻辑是否应自动触发?我是否遗漏了配置项?

解答

首先,令牌自动刷新逻辑是应该自动触发的,但你的配置和使用流程可能存在以下问题:

  • 配置文件语法错误:检查你的appsettings.json,Authority和Scopes字段末尾都缺少闭合双引号,这会导致配置解析失败,TokenAcquisition模块无法正确读取刷新相关配置。
  • Token缓存存储限制:你使用的AddInMemoryTokenCaches()是内存级缓存,在Web应用(尤其是多实例部署场景)中容易出现缓存丢失,若刷新令牌未被正确持久化存储,就无法触发刷新逻辑。建议改用分布式缓存(如Redis)或持久化缓存方案存储令牌。
  • API调用方式不正确:必须通过ITokenAcquisition服务的GetAccessTokenForUserAsync方法获取令牌,而非手动存储复用令牌。该方法内部会自动检测令牌有效期,结合你配置的RefreshBuffer在令牌过期前自动触发刷新。
  • 缺少刷新令牌必要权限:确认Azure AD应用注册中已配置offline_access权限,这是获取刷新令牌的前提。如果没有该权限,系统不会返回刷新令牌,自然无法完成自动刷新。

补充说明:TokenAcquisitionOptions中的ForceRefreshOnExpiration和RefreshBuffer配置是有效的,但需要满足配置解析正确、刷新令牌存在且被正确存储、API调用使用官方令牌获取方法这几个前提。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 14:24:29