У меня есть приложение .net core 2.0 mvc, которое использует Identity Server 4 для аутентификации пользователей.У меня проблемы с выходом пользователя из Identity Server и очисткой файла cookie, созданного мной в приложении mvc.
В приложении mvc я запускаю выход из системы:
await HttpContext.SignOutAsync("Cookies");
await HttpContext.SignOutAsync("oidc");
Затем я перенаправлен на действие выхода из контроллера учетной записи Identity Server, которое успешно вызывает экран «Вы вышли из системы».После этого я бы хотел, чтобы пользователь был перенаправлен на страницу входа в Identity Server, однако, когда я перехожу к своему приложению MVC, меня не просят войти снова, но вместо этого я уже аутентифицирован и имею доступ к приложению mvc.Я изо всех сил пытаюсь понять, когда или как пользователь проходит повторную аутентификацию, когда я только что вышел из системы.
Ниже приведен код моего запуска в MVC и настройки клиента в IDSvr4.
Startup.cs в приложении MVC
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignOutScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultForbidScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies", options =>
{
options.Cookie.Name = "HubCookie";
options.Cookie.Expiration = new TimeSpan(0, 5, 0);
options.SlidingExpiration = true;
options.ExpireTimeSpan = new TimeSpan(0, 5, 0);
options.LogoutPath = "/home/logout";
})
.AddOpenIdConnect("oidc", options =>
{
options.SignInScheme = "Cookies";
options.SignOutScheme = "Cookies";
options.Authority = "https://auth.test.com/";
options.RequireHttpsMetadata = false;
options.ClientId = "mvc";
options.ClientSecret = "XXXXXX";
options.ResponseType = "code id_token";
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.ClaimActions.MapUniqueJsonKey("website", "website");
options.Scope.Add("api1");
options.Scope.Add("offline_access");
options.Scope.Add("testScope");
options.UseTokenLifetime = true;
options.SignedOutRedirectUri = "http://localhost:5002/test/";
//options.CallbackPath = "http://localhost:5002/division/";
});
Конфигурация клиента в IDSvr4
new Client
{
ClientId = "mvc",
ClientName = "MVC Client",
AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,
RequireConsent = false,
ClientSecrets =
{
new Secret("XXXXX".Sha256())
},
RedirectUris = { "http://localhost:5002/signin-oidc" },
PostLogoutRedirectUris = { "http://localhost:5002/signout-callback-oidc" },
FrontChannelLogoutUri = "http://localhost:5002/home/logout",
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"api1", "testScope"
},
AbsoluteRefreshTokenLifetime = 300,
SlidingRefreshTokenLifetime = 120,
RefreshTokenUsage = TokenUsage.ReUse,
RefreshTokenExpiration = TokenExpiration.Sliding,
UpdateAccessTokenClaimsOnRefresh = true,
AllowOfflineAccess = true,
AccessTokenLifetime = 60
}