J'essaie d'activer le service pour authentifier le service à l'aide de jetons AAD. Mon plan consiste à valider la revendication de "groupes" dans le jeton pour s'assurer que l'appelant est membre d'un groupe de sécurité que nous avons créé.
Par exemple, nous créerons le groupe 1 pour les lecteurs et le groupe 2 pour les écrivains. Ensuite, sur la base de la revendication des "groupes", je trouverai le bon niveau d'accès.
J'utilise l'application AAD pour émettre les jetons (pas un utilisateur), j'ai donc besoin que cette application soit membre du groupe de sécurité. Azure AD powershell ne semble pas accepter les ID d'application en tant que membres du groupe. Comment résoudre ça? existe-t-il d'autres modèles recommandés lorsque l'appelant est une autre application AAD?
Commande utilisée: https://docs.Microsoft.com/en-us/powershell/module/azuread/Add-AzureADGroupMember?view=azureadps-2.
Error:
Add-AzureADGroupMember : Error occurred while executing AddGroupMember
Code: Request_BadRequest
Message: An invalid operation was included in the following modified references: 'members'.
RequestId: 0441a156-3a34-484b-83d7-a7863d14654e
DateTimeStamp: Mon, 11 Dec 2017 21:50:41 GMT
HttpStatusCode: BadRequest
HttpStatusDescription: Bad Request
HttpResponseStatus: Completed
At line:1 char:1
+ Add-AzureADGroupMember -ObjectId "9c2cdf89-b8d6-4fb9-9116-7749adec85c ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Add-AzureADGroupMember], ApiException
+ FullyQualifiedErrorId : Microsoft.Open.AzureAD16.Client.ApiException,Microsoft.Open.AzureAD16.PowerShell.AddGroupMember
Add-AzureADGroupMember
ne précise pas que vous ne pouvez pas utiliser ObjectId
de l'application comme RefObjectId
, vous ne pouvez absolument pas l'utiliser. Vous ne pouvez pas non plus ajouter une application en tant que membre du groupe Azure AD. Par exemple, nous créerons le groupe 1 pour les lecteurs et le groupe 2 pour les écrivains. Ensuite, sur la base de la revendication des "groupes", je trouverai le bon niveau d'accès.
Actuellement, vous pouvez ajouter un principal de service à un groupe AAD:
Exemple:
$spn = Get-AzureADServicePrincipal -SearchString "yourSpName"
$group = Get-AzureADGroup -SearchString "yourGroupName"
Add-AzureADGroupMember -ObjectId $($group.ObjectId) -RefObjectId $($spn.ObjectId)
Récemment, je constate également que de nombreux utilisateurs souhaitent attribuer des rôles à un principal de service pour laisser au principal de service des autorisations d'accès à l'application avec un rôle.
Je veux être clair ici. Les autorisations basées sur les rôles doivent être utilisées pour les utilisateurs, PAS pour les applications. Et il n'est pas conçu pour les applications. Si vous souhaitez accorder des autorisations différentes, vous pouvez envisager d'attribuer des autorisations d'application à votre principal de service à la place.
Vous pouvez exposer votre application Web/API avec des autorisations d'application en modifiant le manifeste dans les enregistrements d'application.
Vous pouvez accéder au portail Azure> Azure Active Directory> Inscriptions d'applications> Sélectionnez votre application> Manifest.
Dans appRoles
, vous pouvez insérer du contenu comme ceci:
{
"allowedMemberTypes": [
"Application"
],
"displayName": "Access to the settings data",
"id": "c20e145e-5459-4a6c-a074-b942bbd4cfe1",
"isEnabled": true,
"description": "Administrators can access to the settings data in their tenant",
"value": "Settingsdata.ReadWrite.All"
},
Ensuite, vous pouvez accéder à un autre enregistrement d'application auquel vous souhaitez accorder une autorisation> Paramètres> exiger des autorisations> Ajouter> Rechercher le nom d'application auquel vous souhaitez accéder> Choisissez l'autorisation d'application que vous avez créée auparavant.
Par conséquent, votre sp peut obtenir un jeton avec les autorisations d'application dans les revendications de jeton.
De plus, pour l'autorisation de la ressource, vous devez ajouter une logique de code pour donner une stratégie de contrôle pour ce jeton avec Settingsdata.ReadWrite.All
prétendre.
Actuellement, vous pouvez ajouter le principal du service à un groupe AAD directement dans le portail Azure: