Azure AD 应用程序 - 需要角色分配 + 为应用程序添加角色分配?

12
我有一个MVC Web应用程序(WebAPI + Angular),部署到Azure作为Web应用程序(而不是API应用程序),并设置使用“设置”->“身份验证/授权”->“AAD”->“快速”进行安全保护。这将创建与Web应用程序名称相同的AD应用程序,并且作为普通Web用户(在目录中,使用OAuth)时,可以按预期工作。
但是,我还有需要直接调用WebAPI控制器的外部自动化,因此我需要以编程方式获取Bearer令牌,以便将其与这些请求一起传递。
当"USER ASSIGNMENT REQUIRED TO ACCESS APP" == NO时,所有这些都正常工作。但这不足够,因为目录中的每个人都不应该都能访问此应用程序。
更改该开关会导致以下错误:
“应用程序'AppId'未分配给应用程序'AppId'的角色。”
正在使用的代码:
    var aadLoginUri = "http://login.microsoftonline.com/{0}";
    var tenantId = "[xxx].onmicrosoft.com";
    var authority = String.Format(CultureInfo.InvariantCulture, aadLoginUri, tenantId);
    var clientId = ConfigurationManager.AppSettings["ClientId"];
    var clientSecret = ConfigurationManager.AppSettings["ClientSecret"];

    var authContext = new AuthenticationContext(authority);
    ClientCredential clientCredential = new ClientCredential(clientId, clientSecret);
    AuthenticationResult authResult = authContext.AcquireToken(clientId, clientCredential);

如何为应用程序添加角色分配?
(与用户分配不同)

我尝试使用“向其他应用程序授予权限”部分,但无法将应用程序添加到自身。为了查看是否可以从另一个应用程序解决此问题,我继续创建了一个应用程序,并能够添加应用程序并将委派权限设置为“访问[应用程序名称]”。但是就像以前一样,只有在不需要用户分配即可访问应用程序时才有效。之后,AcquireToken()抛出相同的异常。

似乎这个问题可以通过将我们的API与Angular应用程序解耦来解决,将API作为API应用程序(带有网关)托管,但目前这不是一个选项。此外,这篇文章说这个新的身份验证功能“替代了大多数应用程序的应用服务网关”,而这篇11月份发布的博客文章说“我们建议Web和移动应用程序使用这个功能,而不是继续使用应用服务网关”,所以我想知道这是否只是还没有进入UI界面,或者可能可以通过应用程序清单(尝试过,失败了),图形/服务管理API、PowerShell等添加应用程序角色分配。

2个回答

13
关键在于在清单中定义正确的appRoles(具有正确的allowedMemberType)。
在Azure门户中,请配置以下内容:
需要访问的资源中,打开清单('App Registrations' 标签页)。在appRoles数组中添加两个角色:
- 一个allowedMemberType为“应用程序” - 一个allowedMemberType为“用户”
保存清单。
接下来,在需要访问资源的客户端应用程序中:
- 浏览到“必需权限”并单击“添加” - 搜索要访问的资源 - 在“启用访问”部分的“应用程序权限”下,选择刚刚配置的角色 - 保存并单击“授予权限”
要配置用户权限,请执行以下操作:
- 浏览到“企业应用程序”标签页 - 选择“所有应用程序”,然后选择正确的应用程序 - 单击“用户和组” - 将用户分配到角色
在属性部分中,保持“需要用户分配?”复选框启用。这将仅限制访问已配置的用户。
现在您可以作为用户和应用程序访问资源。

谢谢。我已经忘记了这件事。现在比两年前简单多了 :) - JoeBrockhaus
@JoeBrockhaus 你尝试过以编程方式将用户分配给应用程序吗? - Kira
1
您可以使用一个 appRole 来同时代表“用户”和“应用程序”,还是有特定原因需要两个角色,一个表示每个 allowedMemberType? - Scott Lerch
3
不知道这个“所需权限”在哪里。要么是我找不到,要么(很可能)整个Azure流程已经改变了。我正在尝试让它正常工作,但快要抓狂了。 - Valuator
它已经改变了。在您的客户端应用程序注册中查找“Api权限”。在服务器(受保护的资源)上添加权限,当它询问“权限类型是什么?”时选择“应用程序权限”。 - Lucas

0
如何为应用程序添加角色分配? 1)从应用程序页面下载清单,步骤如下: enter image description here 2)在清单中添加角色内容,如下所示。用户可以被分配为用户角色的应用程序,组、应用程序也可以被分配为角色。
"appRoles": [
{
"allowedMemberTypes": [
    "User"
  ],
  "description": "Admins can manage roles and perform all actions.",
  "displayName": "Global Admin",
  "id": "7c93906c-71fa-4e5b-b1da-21b073d298fd",
  "isEnabled": true,
  "value": "Admin"
}
]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接