调用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
相关产品推荐
相关产品推荐

