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

时间:2015-12-23 22:39:38

标签: c# azure azure-web-sites azure-active-directory

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

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

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

翻转该开关会导致错误:

  

应用程序“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);

如何为应用添加角色分配?
(与用户相对)

我尝试使用“其他应用程序的权限”部分,但无法将应用添加到自身。为了看看这是否可以解决另一个应用程序的问题,我继续创建了一个并且能够添加App&将委派权限设置为“访问[应用程序名称]”。但与以前一样,这仅适用于访问应用程序不需要用户分配的情况。之后AcquireToken()抛出相同的异常。

似乎这个问题could be solved通过将我们的API与Angular应用程序分离,将API作为API应用程序(带有网关)托管,但目前这不是一个选项。另外this article表示这个新的Auth功能“替换了大多数应用程序的App Service网关”和this blog post在11月宣布该功能说“我们推荐网络和移动应用程序使用此功能而不是App Service网关前进“所以我想知道这是否还没有进入UI&也许可以通过app清单(尝试过,失败过),graph / service-mgmt api,powershell等添加应用程序角色分配。

2 个答案:

答案 0 :(得分:6)

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

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

在需要访问的资源中,打开清单('应用注册'刀片)。在 appRoles 数组中,添加两个角色:

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

保存清单。

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

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

配置用户权限

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

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

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

答案 1 :(得分:0)

  

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

1)从应用程序页面下载清单如下: enter image description here

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

Permission