我知道这里已经有一个类似的问题:如何向 openid-configuration 的 Claims_supported 添加更多声明?但它从未得到解答,我的问题专门针对 Entra (Azure AD),而该问题并非特定于该平台。
现在当我伸手去
https://login.microsoftonline.com/{myAppId}/v2.0/.well-known/openid-configuration
我在 json 中得到以下选项
"claims_supported": [
"sub",
"iss",
"cloud_instance_name",
"cloud_instance_host_name",
"cloud_graph_host_name",
"msgraph_host",
"aud",
"exp",
"iat",
"auth_time",
"acr",
"nonce",
"preferred_username",
"name",
"tid",
"ver",
"at_hash",
"c_hash",
"email"
],
消费系统只允许我使用来自该节点的用户名声明,并且我们有一个名为employeeId的自定义声明,我们想使用它,但它不在这个列表中并且不可用。
有什么方法可以将自定义声明添加到
claims_supported
选项中吗?
您可以使用如下策略将自定义声明分配给应用程序:
Connect-AzureAD
$claimsMappingPolicy = [ordered]@{
"ClaimsMappingPolicy" = [ordered]@{
"Version" = 1
"IncludeBasicClaimSet" = $true
"ClaimsSchema" = @(
[ordered]@{
"Source" = "user"
"ID" = "employeeid"
"JwtClaimType" = "employeeid"
}
)
}
}
$appID = "AppID"
$policyName = "Add employeeid to JWT claims"
$sp = Get-AzureADServicePrincipal -Filter "servicePrincipalNames/any(n: n eq '$appID')"
$existingPolicies = Get-AzureADServicePrincipalPolicy -Id $sp.ObjectId `
| Where-Object { $_.Type -eq "ClaimsMappingPolicy" }
if ($existingPolicies) {
$existingPolicies | Remove-AzureADPolicy
}
$policyDefinition = $claimsMappingPolicy | ConvertTo-Json -Depth 99 -Compress
$policy = New-AzureADPolicy -Type "ClaimsMappingPolicy" -DisplayName $policyName -Definition $policyDefinition
Add-AzureADServicePrincipalPolicy -Id $sp.ObjectId -RefObjectId $policy.Id
创建了 Microsoft Entra ID 应用程序并授予 API 权限:
通过设置以下值更新清单:
"acceptMappedClaims": true
AND
"requestedAccessTokenVersion": 2
生成的访问令牌:
GET
https://login.microsoftonline.com/TenantId/oauth2/v2.0/token
grant_type: authorization_code
client_id : ClientId
client_secret : Secret
scope : api://ClientID/claims.read
code : code
redirect_uri : RedirectUrl
显示自定义声明:
您可以将自定义声明分配给应用程序并根据您的要求使用该声明。