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

11

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

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

我们发现可以映射自定义声明,就像这样:Azure Active Directory中的声明映射

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

"AADSTS50146:必须使用应用程序特定签名密钥配置此应用程序。"

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

但问题仍未解决:生成的jwt具有HS256头部,而不是所需的RS256算法。

当我尝试授权jwt时,它失败了,无权访问。

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

有解决此问题的方法吗?

4个回答

21

在Azure中的应用注册清单中,记得将acceptMappedClaims设置为true是个不错的选择。


7
请确保清单文件中以下两个值已正确设置: "acceptMappedClaims": true, "accessTokenAcceptedVersion": 2, - Prateek Kumar Dalbehera
1
根据文档 (https://learn.microsoft.com/zh-cn/azure/active-directory/develop/reference-app-manifest#accesstokenacceptedversion-attribute),如果使用AzureAD和PersonalMicrosoftAccount,则accessTokenAcceptedVersion应设置为2。 - Junaid

1

根据this article,错误信息也可能是因为策略无效。在我的情况下,我通过使用Set-AzureADPolicy PowerShell 命令来更改策略,从而停止了错误。我认为我有一些无效的声明 ID。


1
在我的情况下,将Manifest属性acceptMappedClaims切换为true似乎有所帮助。 之前是null值。我下载了Manifest,将提到的值更改为true,然后将其上传回Azure AD。 我还在Certificates and secrets中生成了一个secret。 然后我退出并重新登录我的应用程序,我可以访问自定义声明。

Change manifest

Create secret


0

我们的应用程序正在使用:

UseWindowsAzureActiveDirectoryBearerAuthentication(
                new WindowsAzureActiveDirectoryBearerAuthenticationOptions

将应用程序更改为:

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

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

目前,我很高兴只将 appid 声明映射(不需要自定义声明映射)到名称声明,如下所示:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接