3

Я пытаюсь добавить аутентификацию Azure AD в мое приложение ASP.NET 5 MVC 6 и последовали этому example on GitHub. Все отлично работает, если я ставлю рекомендуемый код метода действий:Использование [Authorize] с OpenIdConnect в MVC 6 приводит к немедленному пусту 401 ответ

Context.Response.Challenge(
    new AuthenticationProperties { RedirectUri = "/" }, 
    OpenIdConnectAuthenticationDefaults.AuthenticationType); 

Однако, если я пытаюсь с помощью атрибута [Authorize] вместо этого, я немедленно пустого 401 ответа.

Как я могу сделать [Authorize] правильное перенаправление на Azure AD?

Моя конфигурация выглядит следующим образом:

public void ConfigureServices(IServiceCollection services) { 
    ... 
    services.Configure<ExternalAuthenticationOptions>(options => { 
     options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme; 
    }); 
    ... 
} 

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { 
    ... 
    app.UseCookieAuthentication(options => { 
     options.AutomaticAuthentication = true; 
    }); 

    app.UseOpenIdConnectAuthentication(options => { 
     options.ClientId = Configuration.Get("AzureAd:ClientId"); 
     options.Authority = String.Format(Configuration.Get("AzureAd:AadInstance"), Configuration.Get("AzureAd:Tenant")); 
     options.RedirectUri = "https://localhost:44300"; 
     options.PostLogoutRedirectUri = Configuration.Get("AzureAd:PostLogoutRedirectUri"); 
     options.Notifications = new OpenIdConnectAuthenticationNotifications { 
      AuthenticationFailed = OnAuthenticationFailed 
     }; 
    }); 
    ... 
} 

ответ

6

Чтобы автоматически перенаправлять пользователей на AAD при попадании в защищаемый ресурс (т.е. при ловле 401 ответа), лучший вариант, чтобы включить режим automatic:

app.UseOpenIdConnectAuthentication(options => { 
    options.AutomaticAuthentication = true; 

    options.ClientId = Configuration.Get("AzureAd:ClientId"); 
    options.Authority = String.Format(Configuration.Get("AzureAd:AadInstance"), Configuration.Get("AzureAd:Tenant")); 
    options.RedirectUri = "https://localhost:44300"; 
    options.PostLogoutRedirectUri = Configuration.Get("AzureAd:PostLogoutRedirectUri"); 
    options.Notifications = new OpenIdConnectAuthenticationNotifications { 
     AuthenticationFailed = OnAuthenticationFailed 
    }; 
}); 
+0

У меня на самом деле были 'options.AutomaticAuthentication = true', но только для' app.UseCookieAuthentication' (обновил мой вопрос). Добавление этого в 'app.UseOpenIdConnectAuthentication' также помогло. Благодаря! –