Триггер OpenIdConnectEvents с SignInAsync - PullRequest
       29

Триггер OpenIdConnectEvents с SignInAsync

0 голосов
/ 15 сентября 2018

Можно ли вызвать OpenIdConnectEvents при использовании SignInAsync в .NET Core 2?

Сейчас у меня есть следующее в Startup.cs:

services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect("Auth0", options =>
{
    options.Authority = $"https://{Configuration["Auth0:Domain"]}";
    options.ClientId = Configuration["Auth0:ClientId"];
    options.ClientSecret = Configuration["Auth0:ClientSecret"];

    options.ResponseType = "code";

    options.Scope.Clear();
    options.Scope.Add("openid");
    options.Scope.Add("profile");
    options.CallbackPath = new PathString("/signin-auth0");
    options.ClaimsIssuer = "Auth0";
    options.SaveTokens = true;

    options.Events = new OpenIdConnectEvents
    {
        // handle the logout redirection 
        OnRedirectToIdentityProviderForSignOut = (context) =>
        {
            // This DOES get triggered when using SignOutAsync("Auth0", new AuthenticationProperties { ... } );
            return Task.CompletedTask;
        },
        OnTicketReceived = context =>
        {
            // This never gets triggered using SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, claimsPrincipal)
            return Task.CompletedTask;
        }
    };
});

Затем вmy AccountController У меня есть следующая строка кода для входа в систему:

var claimsPrincipal = new ClaimsPrincipal(new ClaimsIdentity(new[]
{
    new Claim(ClaimTypes.NameIdentifier, user.UserId),
    new Claim(ClaimTypes.Name, user.FullName)

}, CookieAuthenticationDefaults.AuthenticationScheme));

await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, claimsPrincipal);

Это никогда не вызывает событие в OpenIdConnectEvents.

При выходе пользователя из системы я использую следующий код:

await HttpContext.SignOutAsync("Auth0", new AuthenticationProperties { RedirectUri = Url.Action("Index", "Home") });

Когда я выхожу из системы, тогда вызывает событие OnRedirectToIdentityProviderForSignOut.

Я замечаю, что могурасскажите, какую схему аутентификации использовать с SignOutAsync.Поэтому в моем случае я советую использовать Auth0.

Я не могу сделать это с SignInAsync.Если я изменяю CookieAuthenticationDefaults.AuthenticationScheme на Auth0, то выдается следующая ошибка:

Обработчиком аутентификации, зарегистрированным для схемы 'Auth0', является 'OpenIdConnectHandler', который нельзя использовать для SignInAsync.Зарегистрированными схемами входа являются: Cookies.

Так что я не могу сделать ничего другого, кроме как использовать CookieAuthenticationDefaults.AuthenticationScheme.

Есть ли способ вызвать OpenIdConnectEventsпри использовании SignInAsync?

...