Можно ли вызвать 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
?