【问题标题】:Add AAD application as a member of a security group将 AAD 应用程序添加为安全组的成员
【发布时间】:2018-05-25 12:39:04
【问题描述】:

我正在尝试使用 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】:
  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 团队会看到的。另外,我会支持你的想法。

更新:


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

示例:

$spn = Get-AzureADServicePrincipal -SearchString "yourSpName"

$group = Get-AzureADGroup -SearchString "yourGroupName"

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

更新 2:

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

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

您可以通过在应用注册中编辑清单来公开您的 Web 应用/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 组:

【讨论】:

  • 我找不到韦恩建议的用户语音项目,所以我继续创建了一个。请在微软网站上投票。 feedback.azure.com/forums/169401-azure-active-directory/…
  • 以下链接表示您可以执行此操作并说明如何操作:blogs.technet.microsoft.com/stefan_stranger/2018/06/06/…
  • 嗨@rudimenter,这是一篇新文章,让我看看。
  • 嗨@rudimenter,我已经检查了这篇文章并对其进行了测试。有效!我会更新我的答案。感谢您的评论。
  • 只允许租户管理员授予应用程序权限,因此它的用处有限。在 AzureAD 中似乎没有相当简单的方法可以向 API 授予无头应用程序(即服务/守护程序)特定权限
猜你喜欢
  • 2019-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-03
  • 2010-10-03
  • 1970-01-01
相关资源
最近更新 更多