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

xuo3flqw  于 2023-10-22  发布在  其他
关注(0)|答案(4)|浏览(92)

我们使用应用程序客户端凭据通过Azure AD进行身份验证。
当我们这样做时,Identity.Namenull。这是因为没有Map到JWT的名称声明。
我们发现您可以Map自定义声明,如下所示:Azure Active Directory中的声明Map。
将策略应用于应用程序时,下次进行身份验证时会收到错误:
“AADSTS 50146:此应用程序需要配置应用程序特定的签名密钥。”
酷,有一种方法可以解决这个问题:New-AzureADApplicationKeyCredential。它表明你可以在你的应用程序中创建一个对称签名密钥,瞧--我们现在有了一个带有自定义声明的JWT。
未解决的问题:它生成具有HS 256报头的jwt,而不是所需的RS 256算法。
当我试图授权jwt对应用程序。它失败了,未经授权。
现在我被卡住了,我可以Map一个自定义声明,但没有办法授权jwt:(
我有办法解决这个问题吗?

1sbrub3j

1sbrub3j1#

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

ep6jt1vc

ep6jt1vc2#

根据this article,错误消息也可能是因为策略无效。在我的例子中,我能够通过使用Set-AzureADPolicy PowerShell命令更改策略来停止错误,错误消失了。我相信我有一些无效的索赔ID。

snvhrwxg

snvhrwxg3#

我们的应用程序使用:

UseWindowsAzureActiveDirectoryBearerAuthentication(
                new WindowsAzureActiveDirectoryBearerAuthenticationOptions

将应用程序更改为:

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

允许我们授权JWT令牌。考虑到索赔Map功能处于预览状态;我就当你回答了。假设当特性发布时,我们可以添加非对称应用程序签名密钥。
现在,我很乐意将appid声明(不需要自定义声明Map)Map到name声明,如下所示:

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

cs7cruho4#

在我的例子中,不知何故帮助将 Manifest 属性 acceptMappedClaims 切换到 true。以前有null值。我下载了Manifest,将提到的值更改为true并将其上传回Azure AD。我还在 * Certificates and secrets * 中生成了一个secret,然后我在应用程序中注销和登录,并且可以访问自定义声明。

相关问题