Identity Server с единым выходом 4 - PullRequest
0 голосов
/ 11 июня 2018

У меня есть приложение .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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...