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

调用AcquireTokenByAuthorizationCodeAsync报错,疑AD库不支持b2clogin

问题

尝试使用AcquireTokenByAuthorizationCodeAsync方法,通过以下代码用授权码换取令牌:

clientCredential credential = new ClientCredential(ConfigurationManager.AppSettings["ClientId"].ToString(), "12345");

string userObjectID = context.AuthenticationTicket?.Identity.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;

var authority = "https://abc.b2clogin.com/xxx.onmicrosoft.com/XXX-SIGNINSIGNUP/v2.0";
AuthenticationContext authContext = new AuthenticationContext(authority, false, new WebSessionCache(userObjectID));

//Aquiring access_token by passing code
AuthenticationResult result = authContext.AcquireTokenByAuthorizationCodeAsync(code, new Uri(ConfigurationManager.AppSettings["azure.B2C.RedirectUrl"].ToString()), credential).Result;

但持续收到错误:您查找的资源已被移除、名称已更改或暂时不可用。

查看Azure AD库代码后发现,当前使用的版本不支持新的b2clogin.com域名,无法正确处理包含版本和策略的权威地址,请问该如何解决?

解决方案

1. 升级到支持b2clogin的认证库

你当前使用的ADAL(Azure Active Directory Authentication Library)版本较旧,原生不支持b2clogin.com域名。需升级到MSAL.NET(Microsoft Authentication Library for .NET)——这是微软官方推荐用于Azure AD B2C的认证库,从早期版本就已适配b2clogin.com。

2. 调整代码适配MSALAPI

替换ADAL的AuthenticationContext和AcquireTokenByAuthorizationCodeAsync为MSAL对应的实现,示例代码如下:

using Microsoft.Identity.Client;

var clientId = ConfigurationManager.AppSettings["ClientId"].ToString();
var clientSecret = "12345";
var redirectUri = new Uri(ConfigurationManager.AppSettings["azure.B2C.RedirectUrl"].ToString());
var authority = "https://abc.b2clogin.com/xxx.onmicrosoft.com/XXX-SIGNINSIGNUP/v2.0";

// 创建MSAL机密客户端实例
IConfidentialClientApplication app = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithClientSecret(clientSecret)
    .WithRedirectUri(redirectUri.ToString())
    .WithB2CAuthority(authority)
    .Build();

// 用授权码换取令牌(需传入业务所需的scopes)
var result = await app.AcquireTokenByAuthorizationCode(scopes, code)
    .ExecuteAsync();

3. 临时过渡方案(不推荐长期使用)

如果暂时无法升级库,可修改权威地址格式,改用旧的login.microsoftonline.com域名:

var authority = "https://login.microsoftonline.com/tfp/xxx.onmicrosoft.com/XXX-SIGNINSIGNUP/v2.0";

注意:此方案仅为临时过渡,微软已逐步淘汰对旧域名的部分支持,建议尽快迁移到MSAL和b2clogin.com。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:20:33