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

Azure AD Application - Require Role Assignment + Add a role assignment for an Application?

我有一个 MVC Web 应用程序 (WebAPI + Angular) 作为 Web 应用程序(而不是 API 应用程序)部署到 Azure,该应用程序设置为使用设置进行保护 - > 身份验证/授权 -> AAD -> 快递。这创建了一个与 Web 应用程序同名的 AD 应用程序,作为普通 Web 用户(在目录中,使用 OAuth),这按预期工作。

但我还有需要直接调用 WebAPI 控制器的外部自动化,因此我需要以编程方式获取 Bearer 令牌以随这些请求一起传递。

当 "USER ASSIGNMENT REQUIRED TO ACCESS APP" == NO 时,一切正常。但这还不够,因为目录中的每个人都不应有权访问此应用程序。

翻转该开关会导致错误:

Application 'AppId' is not assigned to a role for the application '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);

如何为应用程序添加角色分配?
(相对于用户而言)

我尝试使用 'permissions to other applications' 部分,但无法将应用程序添加到自身。为了查看这是否可以解决另一个应用程序的问题,我继续创建了一个应用程序并能够添加该应用程序并将委派权限设置为 'Access [App Name]'。但和以前一样,这仅在不需要用户分配来访问应用程序时才有效。之后 AcquireToken() 抛出相同的异常。

似乎这个问题 by decoupling our API from the Angular app, hosting the API as an API App (with a Gateway), but that's not an option at the moment. Also this article says this new Auth feature "replaces the App Service gateway for most applications" and this blog post 在 11 月宣布该功能时说“我们建议 Web 和移动应用程序使用此功能而不是应用服务网关”所以我想知道这是否还没有进入 UI & 也许可以通过应用程序清单(尝试过,失败)、graph/service-mgmt api、powershell 等添加应用程序角色分配.

How can I add a role assignment for an Application?

1) 从应用程序页面下载清单,如下所示:

2)在Manifest中添加角色内容如下。用户可以作为用户角色分配给应用程序,组,应用程序也可以作为角色分配给应用程序。

"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"
}
]

关键是在清单中定义正确的 appRoles(具有正确的 allowedMemberType)。

在 Azure 门户中,配置以下内容:

在需要访问的resource中,打开manifest('App Registrations'blade)。在appRoles数组中,添加两个角色:

  • allowedMemberType 之一 'Application'
  • allowedMemberType 之一 'User'

保存清单。

接下来,在需要访问资源的客户端应用程序中:

  • 浏览到“所需权限”并单击 'Add'
  • 搜索您要访问的资源
  • 在 'Enable Access' 部分的 'Application Permissions' 下,select 您刚刚配置的角色
  • 保存并点击 'Grant permissions'

配置用户权限

  • 浏览到 'Enterprise Applications' blade
  • Select 'All Application',然后 select 正确的应用程序
  • 点击'Users and Groups'
  • 为用户分配角色

在“属性”部分,启用 'User assignment required?' 复选框。这将限制对已配置用户的访问。

现在您可以作为用户和应用程序访问资源。