【发布时间】: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