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

.NET 8迁移后调用GetAccessTokenForUserAsync遇认证方案错误

解决.NET 8中Azure AD令牌获取的认证方案冲突问题

问题原因

升级到.NET 8并更新Microsoft.Identity.Web后,组件对认证方案的校验逻辑更严格。你调用GetAccessTokenForUserAsync时指定了Cookie认证方案(CookieAuthenticationDefaults.AuthenticationScheme),但令牌获取操作需要关联到OpenID Connect认证方案(而非本地会话的Cookie方案),导致方案不匹配报错。

修复方案

方案1:修改令牌获取代码

移除显式的authenticationScheme参数,让组件自动推断正确的方案:

var accessToken = await m_tokenAcquisition.GetAccessTokenForUserAsync(Configuration["AzureAd:Scopes:0"].Split(" "));

或者直接指定OpenID Connect认证方案:

var accessToken = await m_tokenAcquisition.GetAccessTokenForUserAsync(
    Configuration["AzureAd:Scopes:0"].Split(" "),
    authenticationScheme: OpenIdConnectDefaults.AuthenticationScheme);

方案2:调整服务注册配置

在注册AddMicrosoftIdentityWebApp时,显式指定tokenAcquisitionScheme参数,确保TokenAcquisition组件绑定到正确的认证方案:

.AddMicrosoftIdentityWebApp(options =>
{
    builder.Configuration.GetSection("AzureAd").Bind(options);
    options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.SaveTokens = true;
    options.NonceCookie.SecurePolicy = CookieSecurePolicy.Always;
    options.CorrelationCookie.SecurePolicy = CookieSecurePolicy.Always;
}, 
null, 
OpenIdConnectDefaults.AuthenticationScheme, 
tokenAcquisitionScheme: OpenIdConnectDefaults.AuthenticationScheme)

补充说明

  • Cookie认证方案仅用于管理本地用户会话,令牌获取需要依赖OpenID Connect方案关联Azure AD的身份上下文。
  • 跨.NET版本升级时,需注意第三方库(如Microsoft.Identity.Web)的配置逻辑变更,避免因参数不兼容导致问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:55:05