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

时间:2017-12-11 22:08:19

标签: azure active-directory 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

1 个答案:

答案 0 :(得分:14)

  1. 很遗憾,您无法将应用程序添加为Azure AD组的成员。 虽然Powershell cmdlet Add-AzureADGroupMember的官方文档未明确表示您无法使用应用程序的ObjectId作为RefObjectId,但绝对不能使用它。 您既不能将应用程序添加为Azure AD组的成员。
      

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

  2. 对于你的情景,我担心你现在无法做到这一点。 我明白为什么你需要这个。根据你的要求,我的想法是assigning your application from Enterprise Application to Groups or users和具有不同访问权限的管理员用户。但是,您无法为所选组选择更多角色。唯一一个角色是默认访问权限如果要为应用程序定义更多角色,可以参考this documentation。 我还尝试使用Azure AD RBAC并为我的测试应用程序创建新的条件访问权限,但所有选项都没有只读。 你也可以把你的想法放在Azure Feedback Forum,azure团队会看到它。另外,我会赞同你的想法。
  3. 更新

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

    示例:

    $spn = Get-AzureADServicePrincipal -SearchString "yourSpName"
    
    $group = Get-AzureADGroup -SearchString "yourGroupName"
    
    Add-AzureADGroupMember -ObjectId $($group.ObjectId) -RefObjectId $($spn.ObjectId)
    

    更新2:

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

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

    您可以通过编辑应用注册中的清单来公开具有应用权限的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声明的令牌提供控制策略。

    更新3

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