我有一个使用 ADAL 的客户端/服务器身份验证的工作版本。但是,当您想要使用本地帐户(即,只有一个用户名或只有一个电子邮件地址,除了 AAD 之外没有支持身份验证器)时,B2C AAD 似乎不能很好地与 ADAL 一起使用。看来我们应该用于本地帐户的 API 是 MSAL 的 alpha 版本。到现在为止还挺好。我可以使用 Graph API 并使用以下代码创建本地用户,我似乎正在验证本地用户“joeconsumer@mycompany.com”:
this.pca = new PublicClientApplication("a4828eaa-42f6-418a-8062-f857130b69ce");
AuthenticationResult result = await this.pca.AcquireTokenAsync(
new string[] { "a4828eaa-42f6-418a-8062-f857130b69ce" },
string.Empty,
UiOptions.ForceLogin,
null,
null,
"https://login.microsoftonline.com/" + "darkbondpublic.onmicrosoft.com",
"B2C_1_sign-in");
问题是我使用 WCF 中的自定义安全令牌机制将安全令牌从“result.Token”传递回服务器。服务器上用于使用 ADAL 的代码似乎不再接受来自上述调用的安全令牌:
JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();
Microsoft.IdentityModel.Tokens.SecurityToken securityToken = null;
ClaimsPrincipal claimsPrincipal = tokenHandler.ValidateToken(userName, this.GetTokenValidationParameters(MetadataAddress), out securityToken);
Thread.CurrentPrincipal = claimsPrincipal;
错误信息是:
谁能告诉我这里发生了什么?我需要在服务器上进行身份验证的不同方法吗?