你如何使用MSAL认证AAD B2C?

时间:2017-02-16 15:15:38

标签: azure-active-directory azure-ad-b2c msal

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

错误消息是:

enter image description here

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

2 个答案:

答案 0 :(得分:5)

您为Azure AD B2C租户配置的元数据端点不正确。这是正确的供您参考:

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

我们可以从新的Azure门户中找到特定策略的元数据,如下图所示。 enter image description here

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

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

我们可以找到孩子gfIKIH-yZ3phRHRyjnsHIqZMaePLGAELzPat0CNY4sA的钥匙,如下图所示: enter image description here

答案 1 :(得分:4)

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

v2端点的元数据位于https://login.microsoftonline.com/tfp/ {tenantId} / {policyName} /。众所周知/ openid-configuration

您可以更新自己的网址并再次尝试吗?

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

  1. 找到您的政策
  2. 点击“修改”
  3. 点击“令牌,会话和SSO配置”
  4. 展开“Issuer(iss)claim”
  5. Azure(使用V1端点)和Azure AD B2C(使用V2端点)使用不同的密钥集来签署令牌,因此从正确的位置下载公钥非常重要 - 最初是从V1下载的,但是需要使用V2。