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

Geo*_*ssa 10 active-directory azure azure-active-directory

我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)

Way*_*ang 18

  1. 遗憾的是,您无法将应用程序添加为Azure AD组的成员.虽然在PowerShell命令的正式文件Add-AzureADGroupMember没有说清楚,你不能使用应用程序的ObjectId作为RefObjectId,绝对是你不能使用它.您既不能将应用程序添加为Azure AD组的成员.

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

  2. 对于你的场景,我担心你现在无法做到这一点.我理解你为什么需要这个.根据您的请求,我的想法是将您的应用程序从企业应用程序分配给具有不同访问权限的组或用户和管理员用户.但是,您无法为所选组选择更多角色.唯一一个角色是默认访问权限如果要为应用程序定义更多角色,可以参考此文档.我还尝试使用Azure AD RBAC并为我的测试应用程序创建新的条件访问,但所有人都没有 只读这个选项.您也可以将您的想法放在Azure反馈论坛中,azure团队会看到它.另外,我会赞成你的想法.

更新:


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

例:

$spn = Get-AzureADServicePrincipal -SearchString "yourSpName"

$group = Get-AzureADGroup -SearchString "yourGroupName"

Add-AzureADGroupMember -ObjectId $($group.ObjectId) -RefObjectId $($spn.ObjectId)
Run Code Online (Sandbox Code Playgroud)

更新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"
    },
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 根据Wayne的建议,我无法为此找到用户语音项目,因此我继续创建了一个.请在微软网站上进行投票.https://feedback.azure.com/forums/169401-azure-active-directory/suggestions/33784624-allow-applications-to-be-added-to-ad-security-grou (2认同)