Сеанс не настроен внутри OpenIdConnectEvent OnRemoteFailure - PullRequest
0 голосов
/ 19 октября 2018

Я использую 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.

...