В настоящее время я работаю над приложением .NET 5 с использованием IdentityServer4.
Я использую код авторизации + поток PKCE для входа - к сожалению, выход из системы работает некорректно на localhost.
Мой ландшафт приложений выглядит так:
- Приложение (веб-приложение)
- IdentityServer4
Определение моего клиента в IdentityServer4 выглядит так:
// Authorization Code + PKCE Flow
new Client
{
ClientId = "oidcClient",
ClientName = "Example App",
ClientSecrets = { new Secret("secret".Sha256()) },
RedirectUris = { "https://localhost:44301/signin-oidc" },
PostLogoutRedirectUris = { "https://localhost:44301/signout-callback-oidc" },
AllowedGrantTypes = GrantTypes.Code,
RequirePkce = true,
RequireClientSecret = true,
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
IdentityServerConstants.StandardScopes.Email,
IdentityServerConstants.StandardScopes.OfflineAccess,
"roles",
},
AllowPlainTextPkce = false,
},
Мое соединение OIDC в клиентском приложении выглядит так:
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme)
.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
options.Authority = "https://localhost:5001";
options.RequireHttpsMetadata = true;
options.ClientId = "oidcClient";
options.ClientSecret = "secret";
options.ResponseType = "code";
options.UsePkce = true;
options.ResponseMode = "query";
options.Scope.Add("offline_access");
options.Scope.Add("roles");
options.SaveTokens = true;
});
Метод выхода из системы в моем WebApp HomeController выглядит так:
public async Task<IActionResult> Logout()
{
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
await HttpContext.SignOutAsync(OpenIdConnectDefaults.AuthenticationScheme);
return new SignOutResult(new[] { OpenIdConnectDefaults.AuthenticationScheme, CookieAuthenticationDefaults.AuthenticationScheme });
}
Журналы IdentityServer4 сообщают мне об успешном входе в систему = ›Успешный вход в систему и о выходе из системы =› Успешный выход из системы.
Это странно - приложение все время остается в системе.
Когда я выхожу из системы и возвращаюсь на главную страницу индекса WebApp, я все еще в системе, хотя должен выйти.
Вы знаете, как правильно настроить выход из системы в OIDC-приложении IdentityServer4?
Вы знаете, как решить эту проблему?