Azure 活动目录 |基于角色的授权

Azure Active Directory | Roles based authorization

我尝试过 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 喜欢 OpenIdWindowsBearerToken、...

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

求推荐。

是的,OpenID 是唯一适用于此的中间件。目前没有 OpenID Connect 的替代方案。

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

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