【问题标题】:Azure AD Application - Require Role Assignment + Add a role assignment for an Application?Azure AD 应用程序 - 需要角色分配 + 为应用程序添加角色分配?
【发布时间】:2015-12-23 22:39:38
【问题描述】:

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

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

当“需要用户分配才能访问应用程序”== 否时,这一切正常。但这还不够,因为目录中的每个人都不应有权访问此应用程序。

翻转该开关会导致错误:

应用程序“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() 抛出同样的异常。

似乎这个问题could be solved 是通过将我们的 API 与 Angular 应用程序分离,将 API 托管为 API 应用程序(带有网关),但目前这不是一个选项。此外,this article 表示这一新的身份验证功能“取代了大多数应用程序的应用服务网关”,this blog post 在 11 月宣布该功能时表示“我们建议 Web 和移动应用程序改用此功能应用服务网关的未来”,所以我想知道这是否还没有进入 UI,也许可以通过应用清单添加应用角色分配(尝试过,失败),graph/service-mgmt api、powershell等

【问题讨论】:

    标签: c# azure azure-web-app-service azure-active-directory


    【解决方案1】:

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

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

    在需要访问的资源中,打开ma​​nifest(“应用注册”边栏选项卡)。在 appRoles 数组中,添加两个角色:

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

    保存清单。

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

    • 浏览至“所需权限”并点击“添加”
    • 搜索您要访问的资源
    • 在“启用访问”部分的“应用程序权限”下,选择您刚刚配置的角色
    • 保存并点击“授予权限”

    配置用户权限

    • 浏览到“企业应用程序”刀片
    • 选择“所有应用程序”,然后选择正确的应用程序
    • 点击“用户和组”
    • 为用户分配角色

    在“属性”部分,保留“需要用户分配?”复选框启用。这将仅限于已配置用户的访问权限。

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

    【讨论】:

    • 谢谢。我忘记了这件事。现在比 2 年前简单多了 :)
    • @JoeBrockhaus 您是否尝试过以编程方式将用户分配给应用程序
    • 我已经在 Microsoft 文档中查找此信息已有数小时了!谢谢!
    • 您能否使用一个同时用于“用户”和“应用程序”的 appRole,或者是否有特殊原因需要两个角色,每个角色对应一个 allowedMemberType?
    • 不知道这个“必需权限”在哪里。要么我找不到它,要么(很可能)Azure 中的整个过程已经改变。我快要尖叫起来试图让它发挥作用。
    【解决方案2】:

    如何为应用程序添加角色分配?

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

    【讨论】:

      猜你喜欢
      • 2021-10-04
      • 2015-07-17
      • 2017-12-02
      • 2022-01-17
      • 2022-01-17
      • 2021-04-20
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      相关资源
      最近更新 更多