Azure Active Directory |Ролевая авторизация - PullRequest
0 голосов
/ 25 сентября 2018

Я пробовал различные сценарии аутентификации 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() на основе этого примера?

Пожалуйста, предложите.

1 Ответ

0 голосов
/ 25 сентября 2018

Да, OpenID - единственное промежуточное ПО, которое будет работать для этого.На данный момент нет альтернативы OpenID Connect.

Я обнаружил, что лучший способ установить роли - это добавить эти роли в манифест, а затем жестко закодировать логику для предоставления разных разрешений различным пользователям.

Это лучший образец, который я нашел для этого.Вам просто нужно добавить строку подключения в Azure SQL, чтобы она работала.https://github.com/Azure-Samples/active-directory-dotnet-webapp-roleclaims

...