将AAD应用程序添加为安全组的成员

问题描述 投票:9回答:1

我正在尝试使用AAD令牌启用服务来验证身份验证。我的计划是验证令牌中的“组”声明,以确保调用者是我们创建的安全组的成员。

例如,我们将为读者创建group1,为编写者创建group2。然后基于“群组”声明,我将找出正确的访问级别。

我使用AAD应用程序发出令牌(而不是用户),因此我需要该应用程序成为安全组的成员。 Azure AD powershell似乎不接受应用程序ID作为组成员。怎么解决这个?当调用者是另一个AAD应用程序时,还有其他推荐的模式吗?

使用的命令:https://docs.microsoft.com/en-us/powershell/module/azuread/Add-AzureADGroupMember?view=azureadps-2.0

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
azure active-directory azure-active-directory
1个回答
14
投票
  1. 遗憾的是,您无法将应用程序添加为Azure AD组的成员。虽然Powershell cmdlet Add-AzureADGroupMember的官方文档没有说清楚你不能使用Application的ObjectId作为RefObjectId,但绝对不能使用它。您既不能将应用程序添加为Azure AD组的成员。 例如,我们将为读者创建group1,为编写者创建group2。然后基于“群组”声明,我将找出正确的访问级别。
  2. 对于你的场景,我担心你现在无法做到这一点。我理解你为什么需要这个。根据您的要求,我的想法是assigning your application from Enterprise Application to Groups or users和manger用户具有不同的访问权限。但是,您无法为所选组选择更多角色。唯一一个角色是默认访问权限如果要为应用程序定义更多角色,可以参考this documentation。我还尝试使用Azure AD RBAC并为我的测试应用程序创建新的条件访问,但所有人都没有只读这个选项。你也可以把你的想法放在Azure Feedback Forum,azure团队会看到它。另外,我会赞成你的想法。

Update:


目前,您可以向AAD组添加服务主体:

例:

$spn = Get-AzureADServicePrincipal -SearchString "yourSpName"

$group = Get-AzureADGroup -SearchString "yourGroupName"

Add-AzureADGroupMember -ObjectId $($group.ObjectId) -RefObjectId $($spn.ObjectId)

Updated 2:

最近,我还看到许多用户希望将角色分配给服务主体,以使服务主体具有访问具有角色的应用程序的一些权限。

我想在这里说清楚。基于角色的授权应该用于用户,而不是应用程序。它不是为应用程序设计的。如果要提供某些不同的权限,可以考虑将应用程序权限分配给服务主体。

您可以通过编辑应用程序注册中的Manifest来向Web App / API公开应用程序权限。

您可以转到Azure门户> Azure Active Directory>应用程序注册>选择您的应用程序>清单。

appRoles中,您可以插入如下内容:

  {
      "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"
    },

然后,您可以转到另一个要授予权限的应用程序注册>设置>要求权限>添加>搜索您要访问的应用程序名称>选择您之前创建的应用程序权限。

因此,您的sp可以在令牌声明中获取具有该应用程序权限的令牌。

此外,对于来自资源的授权,您需要添加代码逻辑以使用Settingsdata.ReadWrite.All声明为该令牌提供控制策略。


Update 3

目前,您可以直接在Azure门户中将服务主体添加到一个AAD组:enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.