Я использую Azure AD для аутентификации пользователей.Я хочу перенаправить их на страницу «AccessDenied» всякий раз, когда пользователям не назначается роль для приложения в AAD.
Когда пользователю не назначена роль в AAD, возникает событие OpenIdConnect OnRemoteFailure.Я перенаправил HttpContext в этом событии на мой конкретный вид.Это работает.
Теперь я хочу получить сообщение об ошибке и отобразить его в моем пользовательском представлении.Вот код, который я использую:
public void ConfigureServices(IServiceCollection services)
{
services.AddSession(options =>
{
options.IdleTimeout = System.TimeSpan.FromMinutes(10);
});
.
.
.
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect(options =>
{
options.Events = new OpenIdConnectEvents
{
OnTokenValidated = (ctx) =>
{ ... },
OnRemoteFailure = (ctx) =>
{
ctx.HandleResponse();
ctx.Response.Clear();
ctx.HttpContext.Session.SetString("ErrorMessage", ctx.Failure.Message); // <-- Gives error the session cannot be accessed.
ctx.HttpContext.Response.Redirect("/Account/AccessDenied");
return Task.FromResult(0);
}
}
});
.
.
.
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
.
.
.
app.UseSession();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
Однако, когда я пытаюсь получить доступ к ctx.HttpContext.Session
внутри метода OnRemoteFailure, я получаю: InvalidOperationException: Session has not been configured for this application or request.