0

J'utilise l'autorisation Azure AD OAuth2 pour sécuriser mon API Web. Maintenant, je dois soutenir deux scénarios de OAuth2 (flux) -Azure AD OAuth Client informations d'identification flux contrôle d'accès

  1. application Web accéder à l'API Web et l'API basée sur le rôle servira une ressource de l'utilisateur. Ceci est réalisé en utilisant authoriser le flux oauth, et le contrôle d'accès est effectué en utilisant les attributs Authorize [Role = "Read"]

  2. Une application démon (console) accédant à la même API Web. Bien que je suis en mesure d'obtenir un jeton en utilisant les informations d'identification client flux OAuth, mais je ne suis pas en mesure de comprendre comment gérer l'accès au processus démon

Une fois le jeton est des problèmes de la console peut littéralement accéder à l'une des les méthodes de l'API.

Portée - lorsque grant_type est « client_credentials » portée est pas un paramètre/point final jeton de rôle - ne peux pas utiliser comme cela est associé à l'utilisateur

Quelqu'un peut-il s'il vous plaît suggérer, comment nous pouvons faire un contrôle d'accès au client les informations d'identification circulent? Et comment je peux répondre à la fois aux exigences 1 et 2 en même temps

Répondre

1

Vous pouvez définir des «rôles» pour les utilisateurs et les applications dans le manifeste de votre API dans Azure AD.

Les rôles d'application sont en fait des autorisations d'application si vous vous demandez.

donc vous pouvez avoir quelque chose comme ceci dans votre manifeste API (autres propriétés supprimées pour plus de clarté):

{ 
    "appRoles": [ 
    { 
     "allowedMemberTypes": [ 
     "Application" 
     ], 
     "displayName": "Read all things", 
     "id": "32028ccd-3212-4f39-3212-beabd6787d81", 
     "isEnabled": true, 
     "description": "Allow the application to read all things as itself.", 
     "value": "Things.Read.All" 
    }, 
    { 
     "allowedMemberTypes": [ 
     "User" 
     ], 
     "displayName": "Read things", 
     "id": "ef8d02ff-eee1-6745-9387-96587c358783", 
     "isEnabled": true, 
     "description": "Allow the user to read things.", 
     "value": "Things.Read" 
    } 
    ] 
} 

Nous définissons un rôle qui permet aux applications seulement que ses membres. C'est une permission d'application. L'autre est un rôle qui peut être donné aux utilisateurs et aux groupes.

Vous pouvez ensuite attribuer aux utilisateurs le rôle Lire les éléments et l'application de console du démon l'autorisation Lire toutes les applications. Et vous obtenez les deux scénarios :)

Vous ajoutez le rôle aux utilisateurs/groupes en accédant à Applications d'entreprise-> Votre API-> Utilisateurs et groupes-> Ajouter un utilisateur. Sélectionnez les utilisateurs/groupes que vous souhaitez, puis sélectionnez un rôle pour eux (si vous en avez un seul, il sera présélectionné).

After adding the role, the user will show up in the list

Vous ajoutez l'autorisation d'application en trouvant App Enregistrement-> Obligatoire permissions- de l'autre application> Ajouter-> Trouvez votre API-> Sélection-> Vérifiez l'autorisation d'application défini plus tôt dans la liste. Ensuite, vous pouvez appuyer sur le bouton Autoriser les autorisations pour accorder le rôle d'application.

Permissions required by the Web App on the API

Vous obtenez alors la valeur dans les rôles réclamer pour les deux scénarios.

Ainsi, le rôles réclamation ressemblera à ceci dans le premier scénario:

"roles": [ 
    "Things.Read" 
    ], 

et comme celui-ci dans le deuxième scénario:

"roles": [ 
    "Things.Read.All" 
    ], 
+0

Cela fonctionne dans le scénario 1, mais comment ce flux de travail des informations d'identification client? En supposant que j'ai une application cliente qui devrait avoir un accès "en lecture" et une autre qui a besoin d'un accès "en écriture" où dois-je spécifier le mappage? Existe-t-il un moyen de définir cet accès dans le portail azure? ou le client peut-il demander cette autorisation de lecture/écriture dans la demande de jeton? – Anoop

+1

Le jeton que vous récupérez avec les informations d'identification du client doit inclure le rôle, après avoir ajouté l'autorisation d'application à l'application de console dans Azure AD et l'avoir accordée. – juunas

+0

Juste pour m'assurer que cela fonctionne comme je me souviens, j'ai testé cela. Dans les deux jetons, vous obtenez un tableau de rôles contenant la valeur définie dans le rôle. Alors soit Things.Read ou Things.Read.All dans ce cas. :) – juunas