我已在 Microsoft Entra ID 中注册了一个应用程序。我已经能够根据应用程序的配置生成 jwt 令牌(client_id、tenant_id ...)
我想在生成的 jwt 访问令牌中添加用户的属性 onpremisessamaccountname。 不要担心这里的事实,该值是空的,我有另一个租户,在其上同步和填充本地数据。
从应用程序的令牌配置页面,onpremisessamaccountname 不会显示在可选声明列表中。
我的问题是如何将此属性添加为生成的令牌中的声明?
要将本地用户属性添加为令牌中的声明,您需要将
onPremisesSamAccountname
添加到声明中,并通过创建策略在访问令牌中发送它。
创建一个新的 Microsoft Entra 应用程序并创建策略,如下所示:
Connect-AzureAD
$Definition = [ordered]@{
"ClaimsMappingPolicy" = [ordered]@{
"Version" = 1
"IncludeBasicClaimSet" = $true
"ClaimsSchema" = @(
[ordered]@{
"Source" = "user"
"ID" = "onpremisessamaccountname"
"JwtClaimType" = "onpremisessamaccountname"
}
)
}
}
$pol = New-AzureADPolicy -Definition ($definition | ConvertTo-Json -Depth 3) -DisplayName ("Policy_" + ([System.Guid]::NewGuid().guid) + "_" + $template.Values.claimsschema.JwtClaimType) -Type "ClaimsMappingPolicy"
$entApp = New-AzureADApplication -DisplayName ("RukClaimsDemoApp_" + $template.Values.claimsschema.JwtClaimType)
$spnob = New-AzureADServicePrincipal -DisplayName $entApp.DisplayName -AppId $entApp.AppId
Add-AzureADServicePrincipalPolicy -Id $spnob.ObjectId -RefObjectId $pol.Id
检查策略是否已创建:
Get-AzureADServicePrincipalPolicy -Id SPNObjectID
在清单中,将
acceptMappedClaims
更新为 true:
Expose an API 中的范围将自动添加:
授予 API 权限,如下所示:
对于 sample,通过 Postman 使用交互流生成令牌:
https://login.microsoftonline.com/TenantID/oauth2/v2.0/authorize?
&client_id=ClientID
&response_type=code
&redirect_uri=https://jwt.ms
&response_mode=query
&scope=ClientID/.default openid
&state=12345
当您解码令牌时,将显示声明
onpremisessamaccountname
。
AzureADPreview
模块不会造成任何问题,您可以安装该模块。参考资料:
使用声明映射策略将 sAMAccountName 添加到 Azure AD 访问令牌 (JWT)(并避免 AADTS50146) – SecureCloudBlog
https://learn.microsoft.com/en-us/answers/questi/azure-ad-custom-attribute作者:Sandeep G-MSFT