0

我有一个使用 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;

错误信息是:

在此处输入图像描述

谁能告诉我这里发生了什么?我需要在服务器上进行身份验证的不同方法吗?

4

3 回答 3

5

你为 Azure AD B2C 租户配置的元数据终结点不正确。以下是正确的供您参考:

https://login.microsoftonline.com/{tenantId}/v2.0/.well-known/openid-configuration?p=B2C_1_Sign_In

我们可以从新的 Azure 门户中找到特定策略的元数据,如下图所示。 在此处输入图像描述

在元数据中应该能够看到如下所示的密钥端点:

https://login.microsoftonline.com/{tenant}/discovery/v2.0/keys?p={policy}

gfIKIH-yZ3phRHRyjnsHIqZMaePLGAELzPat0CNY4sA如下图所示 ,我们可以找到带有孩子的钥匙:在此处输入图像描述

于 2017-02-17T07:23:12.480 回答
4

我认为问题是:您正在向 V1 端点发送请求,但 AAD B2C 使用具有权限的 V2 端点:https : //login.microsoftonline.com/tfp/ {tenantId} / {policyName} /v2.0/

v2 端点的元数据可在https://login.microsoftonline.com/tfp/ {tenantId} / {policyName} /.well-known/openid-configuration

你能更新你的网址并再做一次尝试吗?

要在 Azure 门户中查看权限,请选择您的策略,然后:

  1. 找到您的保单
  2. 点击“编辑”
  3. 单击“令牌、会话和 SSO 配置”
  4. 展开“发行人(iss)索赔”

Azure(使用 V1 端点)和 Azure AD B2C(使用 V2 端点)使用不同的密钥集来签署令牌,因此从正确的位置下载公钥很重要——最初是从 V1 下载的,但需要使用 V2。

于 2017-02-17T06:50:44.193 回答
0

对我来说,这个端点有效:

https://{Azure 域}/{Azure 租户}/v2.0/.well-known/openid-configuration?p={Azure 策略}

于 2021-09-01T13:12:52.543 回答