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

Hof*_*nia 6 azure azure-active-directory

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

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

我们发现您可以映射自定义声明,如下所示:Azure Active Directory 中的声明映射

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

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

很酷,不过有一种方法可以解决这个问题:New-AzureADApplicationKeyCredential。它表明您可以在您的应用程序中创建一个对称签名密钥,瞧——我们现在有一个带有自定义声明的 JWT。

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

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

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

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

cry*_*yss 9

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

  • 请确保清单文件中正确设置了下面提到的两个值:“acceptMappedClaims”:true,“accessTokenAcceptedVersion”:2, (3认同)

Hof*_*nia 0

我们的应用程序使用:

UseWindowsAzureActiveDirectoryBearerAuthentication(
                new WindowsAzureActiveDirectoryBearerAuthenticationOptions
Run Code Online (Sandbox Code Playgroud)

将应用程序更改为:

UseJwtBearerAuthentication(
            new Microsoft.Owin.Security.Jwt.JwtBearerAuthenticationOptions
Run Code Online (Sandbox Code Playgroud)

允许我们授权 JWT 令牌。考虑到索赔映射功能处于预览状态;我暂时将此作为答案。假设该功能发布后,我们可以添加非对称应用程序签名密钥。

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

JwtSecurityTokenHandler.InboundClaimTypeMap.Add("appid", System.Security.Claims.ClaimTypes.Name);
Run Code Online (Sandbox Code Playgroud)