Проверка подлинности OpenId Azure AD не работает, если атрибут авторизации встроен - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь аутентифицировать пользователей для службы приложений Azure, написанной на полной версии C # 4.7.2.

Аутентификация выполняется в OpenId в Azure AD.

Хорошо работает при использовании атрибута [Authorize] на контроллере.

Когда я пытаюсь украсить контроллер с помощью атрибута атрибута AuthorizeAttribute, аутентификация больше не основывается на Azure Ad (в облаке или через iisexpress / localhost)

Мне нужно переопределить метод OnAuthorize, поскольку приложение отображает разные данные в зависимости от контекста, и этот контекст должен соответствовать группе безопасности некоторых пользователей.

т.е. urls / context1 и / context2 воспроизводят один и тот же код, но запросы dbs будут отличаться условием «где контекст = @context». Все URL будут иметь префикс / context1 или /context2.

Вот соответствующий код:

        public void ConfigureAuth(IAppBuilder app)
        {

            //https://azure.microsoft.com/fr-fr/resources/samples/active-directory-dotnet-webapp-groupclaims/
            app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

            app.UseCookieAuthentication(new CookieAuthenticationOptions());
            string authority = $"https://login.microsoftonline.com/{ConfigurationManager.AppSettings["ida:Tenant"]}";
            string client = ConfigurationManager.AppSettings["ida:ClientId"];
            app.UseOpenIdConnectAuthentication(
                new OpenIdConnectAuthenticationOptions
                {
                    ClientId = client,
                    Authority = authority,
                    TokenValidationParameters = new TokenValidationParameters
                    {
                        ValidateIssuer = false,
                        RoleClaimType = "groups",
                    },
                    Notifications = new OpenIdConnectAuthenticationNotifications
                    {
                        RedirectToIdentityProvider = OnRedirectToIdentityProvider,
                        //MessageReceived = OnMessageReceived,
                        //SecurityTokenValidated = OnSecurityTokenValidated,
                        //AuthenticationFailed = OnAuthenticationFailed,
                        AuthorizationCodeReceived = OnAuthorizationCodeReceived,
                        //SecurityTokenReceived = OnSecurityTokenReceived
                    }
                });
        }

«OnRedirectToIdentityProvider» помогает мне проверить, вызывается ли Azure AD аутентификация.

public class CustomAuthorizeAttribute : AuthorizeAttribute
    {

        public override void OnAuthorization(AuthorizationContext context)
        {
            //OnRedirectToIdentityProvider has not been called
            //Checking that the authenticated user is in the right
            //security group to grant access to /context1 or /context2
        }
}

Я надеялся, что конфигурация Startup.cs будет вызвана после переопределения OnAuthorize.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 17 апреля 2019

Во время ожидания ответа и попытки упростить авторизацию у меня возникла другая проблема, и я нашел ответ при ее поиске.

Чтобы продолжить аутентификацию в Azure AD, можно переопределить метод AuthorizationCore.

Вот новый код:

 public class CustomAuthorizeAttribute : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase context)
        {
            if (!base.AuthorizeCore(context))
                return false;
            //Custom actions
        }
    }

С уважением.

...