Я пытаюсь добавить пользовательские атрибуты в свой токен аутентификации, но у меня возникла проблема с добавлением пользовательского атрибута. Я пробовал методы, предложенные в:
но не повезло.
Я использую Postman с этим API:
https://login.microsoftonline.com/<tenand-id>/oauth2/v2.0/token
с полезной нагрузкой:
grant_type:password
client_id:****
scope:https://graph.microsoft.com/.default
username:****
password:****
client_secret:***
Может ли кто-нибудь помочь мне с этой конкретной проблемой или предложить альтернативный подход?
В токене я получаю:
***
"family_name": "**",
"given_name": "**",
"idtyp": "user",
"ipaddr": "**",
"name": "***",
***
Как добавить атрибут employeeId
в токен? По этой ссылке: [https://learn.microsoft.com/en-us/entra/external-id/customers/how-to-add-attributes-to-token] я добавляю в «Единый вход» > Атрибуты. & Утверждение > Добавить новое утверждение > добавленное имя, Источник = Атрибут, расширенный токен SAML, а также проверить и сохранить.
Вы хотите просто получить идентификатор сотрудника в токене? да!
Вы используете единый вход SAML или обычное приложение? Это для интеграции keycloak
Чтобы отобразить employeeid
в качестве утверждения в токене доступа, проверьте следующее:
Используйте приведенный ниже сценарий PowerShell, чтобы создать политику и назначить ее приложению:
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 Graph API. Обратитесь сюда MsDoc
Следовательно, выставьте API и добавьте область действия, как показано ниже:
Предоставьте разрешения API:
Обязательно обновите манифест, установив следующие значения:
"acceptMappedClaims": true
AND
"requestedAccessTokenVersion": 2
Для примера я сгенерировал токен доступа, используя код авторизации (поскольку у моего арендатора включен MFA, он не может использовать поток ROPC):
Grant type: Authorization code
Callback URL: https://oauth.pstmn.io/v1/callback
Auth URL: https://login.microsoftonline.com/TenantId/oauth2/v2.0/authorize
Token URL : https://login.microsoftonline.com/TenantId/oauth2/v2.0/token
Client ID : ClientId
Client Secret : ClientSecret
Scope: api://ClientID/Claims.Read
Когда я декодировал токен, утверждение сотрудника успешно отображается:
Вы хотите просто получить идентификатор сотрудника в токене? Вы используете SAML SSO или обычное приложение?