web-dev-qa-db-fra.com

Azure ad créances personnalisées dans JWT

J'ai une application Azure ad et j'essaie d'ajouter des revendications personnalisées à un JWT. J'utilise la fonctionnalité de mappage des réclamations dans Azure pour mon application spécifique et j'ai mis à jour le manifeste de l'application dans le portail Azure pour inclure les revendications facultatives. Cependant, lorsque je vous connecte et affiche le jeton d'accès décodé, la réclamation n'est pas présente dans le jeton. Je n'ai pas trouvé beaucoup de documentation relative à l'utilisation d'attributs d'extension comme des revendications, mais de ce que j'ai trouvé, il devrait suivre les mêmes schémas, mais cela ne fonctionne pas comme prévu.

Comment ajouter une réclamation personnalisée provenant d'une propriété personnalisée dans l'objet utilisateur dans AD, à un JWT lorsque l'utilisateur se connecte?

Merci d'avance!

Étapes pour recréer

  1. Utilisez l'API AZURE AD GRAPH pour enregistrer une extension de répertoire

Demande:

POST https://graph.windows.net/mytenant.onmicrosoft.com/applications/<application-object-id>/extensionProperties?api-version=1.5

Corps:

{
   "name": "customUserRoles",
   "dataType": "String",
   "targetObjects": ["User"]
}
  1. Écrivez une valeur à l'extension d'un utilisateur d'annonces spécifique

Demande:

PATCH https://graph.windows.net/mytenant.onmicrosoft.com/users/[email protected]?api-version=1.5

Corps:

{
   "extension_<appId>_customUserRoles": "My Custom Role 1, Another Role 2"
}
  1. Dans PowerShell, j'ai installé le module Azure AD: Install-Module -Name AzureADPreview
  2. Créer une politique d'annonce azur
New-AzureADPolicy -Definition @('{"ClaimsMappingPolicy":{"Version": 1, "IncludeBasicClaimSet": "true", "
ClaimsSchema": [ { "Source": "user", "ID": "extension_<appId>_customUserRoles", "JwtClaimType": "customUserRoles" } ] } }') -DisplayName "customUserRoles" -Type "ClaimsMappingPolicy"
  1. Ajoutez la politique au principal
Add-AzureADServicePrincipalPolicy -Id <service-principla-id> -RefObjectId <Azure-ad-policy-id>
  1. Dans le portail Azure, accédez à Azure AD -> Inscriptions d'applications -> Mon application -> Manifeste
  2. Mettre à jour les propriétés suivantes
{
   ...
   "acceptMappedClaims: true,
   "optionalClaims": {
      "idToken": [
         {
            "name": "extension_<appId>_customUserRoles",
            "source": "user",
            "essential": false,
         }
      ],
      "accessToken": [
         {
            "name": "extension_<appId>_customUserRoles",
            "source": "user",
            "essential": false,
         }
      ],
      "samlToken": []
   }
}
  1. Enregistrer le fichier
  2. Aller vers https://login.microsoftonline.com/mytenant.onmicrosoft.com/oauth2/authorize?client_id=<appId>&response_type=token&resource=https://mytenant.sharepoint.com et connectez-vous avec un compte d'utilisateur AZURE AD [email protected]
  3. Dans l'URL, copiez la valeur de l'access_token paramètre
  4. Aller vers https://jwt.ms et coller le jeton d'accès dans la zone de texte
  5. Dans la section de jeton décodé, la revendication personnalisée CustomUserRoles est non présent

Mon attente est que je devrais voir une nouvelle revendication appelée customUserRoles ou extn.customUserRoles dans le jeton décodé.

Quelles mesures je manque? Je n'ai pas eu d'erreurs tout au long de ce processus, mais cela ne semble pas fonctionner car la documentation suggère.


Matériel de référence

J'ai lu la documentation de Microsoft sur ces sujets:

Réclamations facultatives: https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-Optional-claims

CARNEMENT DE RÉCLAMATION: https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-Claims-mapping


J'ai également lu sur divers postes de forum et articles de blog en relatif à ceci:

https://devonblog.com/cloud/azure-ad-adding-employeid-claims-in-azure-ad-jwt-Token/

http://www.redbaronofazure.com/?p=7566

https://social.msdn.microsoft.com/forums/en-us/3e5114b6-24d6-4c60-b72b-b4c90baeecac/access-token-Missing-Optional-claims-that-are-schema-extensions- flux de subventions implicite

https://social.msdn.microsoft.com/forums/en-us/dbeeed63-8d3f-4c27-b416-431f9fe6c729/providing-directory-exTension-Optional-claims-et-ret jeton? forum = windowsazuread

6
halshing

Basé sur - ce fonctionnaire doc:

Les jetons d'accès sont toujours générés à l'aide du manifeste de la ressource, pas du client. Donc, dans la demande ... Scope = https://graph.microsoft.com/user.read ... La ressource est graphique. Ainsi, le jeton d'accès est créé à l'aide du manifeste graphique, et non du manifeste du client. Changer le manifeste pour votre application ne causera jamais de jetons de graphique pour avoir l'air différent. Afin de valider que vos modifications accessibles sont en vigueur, demandez un jeton pour votre application, pas une autre application.

Et en fonction de vos besoins, il est impossible si vous souhaitez modifier un jeton d'accès que la ressource est SharePoint Online qui est une application multi-locataires créée et gérée par MSFT.

Pour ce doc , j'ai aussi fait des recherches pour vous. Et le même, vous devriez avoir le contrôle de l'application latérale de service afin que vous puissiez faire cela arriver.

Ceci est ma commande de mission de rôle de politique:

$nsp = New-AzureADPolicy -Definition @('{"ClaimsMappingPolicy":{"Version":1,"IncludeBasicClaimSet":"true", "ClaimsSchema": [{"Source":"user","ID":"mailnickname","JwtClaimType":"testclaim"}]}}') -DisplayName "StanCustomCliamDemo_surname" -Type "ClaimsMappingPolicy"

Add-AzureADServicePrincipalPolicy  -RefObjectId $nsp.Id -Id '<obj id of service side app>'

Résultat de jeton: enter image description here

De plus, PLS Notez que extension_<appId>_customUserRoles N'est-ce pas un identifiant de source utilisateur valide. Pour tous les identifiants de source utilisateur valides, les pls se réfèrent à ici .

J'espère que ça aide .

1
Stanley Gong