Azure AD声明映射需要自定义签名密钥

时间:2017-11-09 21:44:29

标签: azure azure-active-directory

我们正在使用应用程序客户端凭据通过Azure AD进行身份验证。

当我们这样做时,Identity.Namenull。这是因为没有名称声明映射到JWT。

我们发现您可以映射自定义声明,例如:Claims mapping in Azure Active Directory

将策略应用于应用程序时,下次进行身份验证时会收到错误:

  

" AADSTS50146:此应用程序需要使用特定于应用程序的签名密钥进行配置。"

很酷,但还有一种方法:New-AzureADApplicationKeyCredential。它表示您可以在应用程序中创建对称签名密钥,我们现在有一个带有自定义声明的JWT。

问题,未解决:它生成一个带有HS256标头的jwt,而不是所需的RS256算法。

当我尝试针对应用程序授权jwt时。它失败了,未经授权。

现在我卡住了,我可以映射一个自定义声明,但无法授权jwt :(

我有办法解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

我们的申请正在使用:

UseWindowsAzureActiveDirectoryBearerAuthentication(
                new WindowsAzureActiveDirectoryBearerAuthenticationOptions

将应用程序更改为:

UseJwtBearerAuthentication(
            new Microsoft.Owin.Security.Jwt.JwtBearerAuthenticationOptions

允许我们授权JWT令牌。考虑到声明映射功能正在预览中;我现在就把它作为答案。假设在发布该功能时,我们可以添加非对称应用程序签名密钥。

现在,我很高兴将appid声明(并且不需要自定义声明映射)映射到名称声明,如下所示:

JwtSecurityTokenHandler.InboundClaimTypeMap.Add("appid", System.Security.Claims.ClaimTypes.Name);

答案 1 :(得分:0)

请记住在Azure的应用程序注册清单中将acceptMappedClaims设置为true。

答案 2 :(得分:0)

根据this article,该错误消息也可能是因为该策略无效。就我而言,通过使用Set-AzureADPolicy PowerShell命令更改策略,我得以使错误停止,错误消失了。我相信我有一些无效的索赔ID。