Joe*_*aus 6 c# azure azure-web-sites azure-active-directory
我有一个MVC Web应用程序(WebAPI + Angular)部署到Azure作为Web应用程序(而不是API应用程序),设置为使用设置 - >身份验证/授权 - > AAD - > Express进行保护.这创建了一个与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);
Run Code Online (Sandbox Code Playgroud)
如何为应用程序添加角色分配?
(而不是用户)
我尝试使用"其他应用程序的权限"部分,但无法将应用程序添加到自身.为了查看这是否可以解决另一个应用程序的问题,我继续创建了一个,并且能够添加应用程序并将委托权限设置为"访问[应用程序名称]".但与以前一样,这仅适用于访问应用程序不需要用户分配的情况.然后AcquireToken()抛出相同的异常.
看起来这个问题可以通过将我们的API与Angular应用程序分离来解决,将API作为API应用程序(带有网关)托管,但目前这不是一个选项.此外,本文还说这个新的Auth功能" 替换了大多数应用程序的App Service网关 ",这篇博文在11月宣布该功能说" 我们建议网络和移动应用程序使用此功能而不是App Service网关 ",所以我想知道如果这还没有进入UI并且可能通过应用程序清单(尝试,失败),graph/service-mgmt api,powershell等添加应用程序角色分配.
关键是在清单中定义正确的appRoles(使用正确的allowedMemberType).
在Azure门户中,配置以下内容:
在需要访问的资源中,打开清单("App Registrations"刀片).在appRoles数组中,添加两个角色:
保存清单.
接下来,在需要访问资源的客户端应用程序中:
要配置用户权限:
在"属性"部分中,保留"需要用户分配?" 复选框已启用 这将仅限制对已配置用户的访问.
现在,您可以作为用户和应用程序访问资源.
| 归档时间: |
|
| 查看次数: |
3892 次 |
| 最近记录: |