Występują problemy z potokiem uwierzytelniania w środowisku ASP.NET Core. Mój scenariusz polega na tym, że chcę rzucić wyzwanie użytkownikowi, który jest już uwierzytelniony przy użyciu OpenID Connect i Azure AD. Istnieje wiele scenariuszy, w których chcesz to zrobić, na przykład podczas żądania dodatkowych zakresów w scenariuszu punktu końcowego AAD v2.Ponowne uwierzytelnianie uwierzytelnionych użytkowników w środowisku ASP.NET Core
Działa to jak urok w ASP.NET MVC, ale w ASP.NET Core MVC użytkownik jest przekierowywany do strony odmowy dostępu skonfigurowanej w oprogramowaniu pośredniczącym do uwierzytelniania plików cookie. (Gdy użytkownik nie jest zalogowany, wystawienie wyzwania działa zgodnie z oczekiwaniami.)
Po kilku godzinach przeszukiwania sieci i wypróbowaniu różnych parametrów dla opcji oprogramowania pośredniego, zaczynam podejrzewać, że albo mnie brakuje coś oczywistego lub takie zachowanie jest zgodne z projektem i muszę rozwiązać moje wymagania w inny sposób. Czy ktoś ma jakieś pomysły na ten temat?
EDIT: odpowiednie części moich Startup.cs wyglądać następująco:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddAuthentication(
SharedOptions => SharedOptions.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
// <snip...>
app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationScheme = CookieAuthenticationDefaults.AuthenticationScheme });
var options = new OpenIdConnectOptions
{
AuthenticationScheme = OpenIdConnectDefaults.AuthenticationScheme,
ClientId = ClientId,
Authority = Authority,
CallbackPath = Configuration["Authentication:AzureAd:CallbackPath"],
ResponseType = OpenIdConnectResponseType.CodeIdToken,
PostLogoutRedirectUri = "https://localhost:44374/",
TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
{
ValidateIssuer = false
}
};
options.Scope.Add("email");
options.Scope.Add("offline_access");
app.UseOpenIdConnectAuthentication(options);
}
a akcja wygląda następująco:
public void RefreshSession()
{
HttpContext.Authentication.ChallengeAsync(OpenIdConnectDefaults.AuthenticationScheme, new AuthenticationProperties { RedirectUri = "/" });
}
Czy rozważałeś użycie AuthenticationSchemes? Jeśli chcesz zignorować autoryzację plików cookie dla niektórych działań, możesz użyć atrybutu Autoryzuj z innym schematem, np. Azureaadscheme. –
Niestety to też nie pomaga. Mogę ustawić wszystkie schematy, jakie chcę, i określić jeden dla wyzwania, ale uwierzytelnianie plików cookie nadal jest w jakiś sposób zaangażowane w jego obsługę. I proszę zauważyć, że nie używam atrybutu Autoryzuj. Użytkownik jest już uwierzytelniony i ręcznie wystawiam wyzwanie. – VolatileCoder
Czy mógłbyś opublikować startup.cs i metodę działania? –