【问题标题】:Azure Active Directory | Roles based authorizationAzure 活动目录 |基于角色的授权
【发布时间】:2018-09-25 07:05:43
【问题描述】:

我尝试了各种跨 Internet 的 Azure Active Directory 身份验证方案。所有示例都只关注通过身份验证进行授权。我正在寻找根据我的AAD App Registration 的角色授权用户。

Auth() Scenarios,

例如,

..\Controller\ArtistController.cs:

public class ArtistController : ApiController
    {
        [Authorize(Roles = "Admin, InternalAdmin")]
        public void Post(ArtistModel model)
        {
            // Do admin stuff here...
        }
    }

..\App_Start\Startup.Auth.cs [不工作]

public void ConfigureAuth(IAppBuilder app)
    {
        app.UseWindowsAzureActiveDirectoryBearerAuthentication(
                new WindowsAzureActiveDirectoryBearerAuthenticationOptions
                {
                    Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
                    TokenValidationParameters = new TokenValidationParameters
                    {
                        SaveSigninToken = true,
                        ValidAudience = ConfigurationManager.AppSettings["ida:Audience"],
                        RoleClaimType = "http://schemas.microsoft.com/ws/2008/06/identity/claims/role"
                    }
                });
    }

..\App_Start\Startup.Auth.cs [工作中]

public void ConfigureAuth(IAppBuilder app)
{
    app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                ClientId = ConfigHelper.ClientId,
                Authority = ConfigHelper.Authority,
                RedirectUri = "<<Home_Url>>",
                PostLogoutRedirectUri = ConfigHelper.PostLogoutRedirectUri,

                TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer = true,
                    NameClaimType = "upn",
                    RoleClaimType = "roles",    // The claim in the Jwt token where App roles are provided.
                },

                Notifications = new OpenIdConnectAuthenticationNotifications()
                {
                    AuthenticationFailed = context =>
                    {
                        context.HandleResponse();
                        context.Response.Redirect("/Error/ShowError?signIn=true&errorMessage=" + context.Exception.Message);
                        return System.Threading.Tasks.Task.FromResult(0);
                    }
                }
            });
}

我了解OWIN 可以连接任何middleware 来处理传入的http 请求。 Auth Middlewares 喜欢 OpenId, WindowsBearerToken,...

根据这个例子,UseOpenIdConnectAuthentication() 是唯一正确的middleware 来通过UseWindowsAzureActiveDirectoryBearerAuthentication() 上的角色授权网络资源吗?

请提出建议。

【问题讨论】:

    标签: c# azure azure-active-directory owin owin-middleware


    【解决方案1】:

    是的,OpenID 是唯一适用于此的中间件。 OpenID Connect 目前别无选择。

    我发现设置角色的最佳方法是在清单中添加这些角色,然后对逻辑进行硬编码以将不同的权限授予不同的用户。

    这是迄今为止我找到的最好的样本。只需将连接字符串添加到 Azure SQL 即可。 https://github.com/Azure-Samples/active-directory-dotnet-webapp-roleclaims

    【讨论】:

    • 感谢您的快速回复!我有一个场景。用户以交互方式向 Web App 进行身份验证,通过角色访问控制器资源,Web App 应调用具有相同权限(角色)的另一个 Web Api 资源。这可能吗?
    • 我能够让用户按角色访问 Web App 资源,并使 Web App 通过 AAD_Bearer_Access_Token(无角色)调用另一个 Web Api 资源。这是一种通用方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2017-12-14
    • 2017-04-12
    • 2018-07-21
    • 1970-01-01
    • 2015-09-30
    相关资源
    最近更新 更多