Два сайта localhost не используют файлы cookie, хотя обе аутентификации направлены против локального сервера идентификации 4 - PullRequest
0 голосов
/ 01 октября 2018

У меня проблема с единой регистрацией на сервере Identity 4.

Пока я следил за видео и статьями Identity Server 4 (с aspnet core 2), я разработал пример приложения + локальный сервер идентификации,У меня есть:

Оба приложения имеют одинаковое ядро ​​Asp.net 2 (MVC), за исключением идентификатора клиента.У них одинаковые полномочия https://localhost:5001

Теперь, когда я пытался аутентифицировать Приложение 1 на сервере Identity, он дает мне страницу входа в систему, аутентификацию пользователя (на основании идентификационных данных aspnet) и возвращает мне домашнюю страницу.Я вижу, что претензии также поступают, как и ожидалось.

То же самое относится и к Приложению 2, и к серверу Identity.

Но теперь проблема в том, что: если я завершу аутентификацию для приложения 1 и попытаюсь обновить страницу в приложении 2 или на сервере идентификации, аутентификация не будет выполнена.Если я пытаюсь получить доступ к защищенной странице, мне выдается экран входа в систему с Identity Server 4, как будто аутентификации не было.То же самое я попытался проверить, выполнив аутентификацию непосредственно на Identity Server 4 и обновив оба приложения (1 и 2), но безуспешно.

Похоже, я что-то упустил.Вот моя конфигурация:

Сторона приложения, которую я имею:

options.Authority = authenticationSettings.IdentityServer.Authority;
        options.RequireHttpsMetadata = bool.Parse(authenticationSettings.IdentityServer.RequireHttpsMetadata);
        options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;

        options.ClientId = authenticationSettings.IdentityServer.ClientId;
        options.GetClaimsFromUserInfoEndpoint = true;
        options.ResponseType = "code id_token";
        options.SaveTokens = true;
        options.ClientSecret = "secret";

        options.Scope.Add("openid");
        options.Scope.Add("profile");
        options.Scope.Add("email");

В классе запуска код для ConfigureServices находится здесь ...

public void ConfigureServices(IServiceCollection services)
    {
        AuthenticationSettings authenticationSettings = services.RegisterAuthenticationSettings(configuration: Configuration);

        services.AddAuthentication(options =>
        {
            options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
        })
        .AddCookie()
       .AddOpenIdConnect(options => SetOpenIdConnectOptions(options, authenticationSettings));

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    }

Для настройкиМетод:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {

        app.UseCookiePolicy();
        app.UseAuthentication();
    }

Сторона сервера удостоверений У меня есть следующий клиент (то же самое для приложений 1 и 2, кроме идентификатора клиента):

 new Client
            {
                ClientId = "mvc01",
                ClientName = "MVC 01 Demo",
                AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,
                ClientSecrets = { new Secret("secret".Sha256()) },
                AllowAccessTokensViaBrowser = true,
                RequireConsent = false,
                RedirectUris =           { "https://localhost:44317/signin-oidc"},
                PostLogoutRedirectUris = { "https://localhost:44317/signout-callback-oidc" },
                BackChannelLogoutUri = "https://localhost:44317/signout-callback-oidc",
                FrontChannelLogoutUri  = "https://localhost:44317/signout-callback-oidc",
                AllowedCorsOrigins =     { "https://localhost:44317" },
                AllowedScopes =
                {
                    IdentityServerConstants.StandardScopes.OpenId,
                    IdentityServerConstants.StandardScopes.Profile,
                    IdentityServerConstants.StandardScopes.Email,
                    "office"
                }
            }

Я также пытался проверить информацию о приложении в ChromeПанель инструментов разработчика и обнаружил, что они по отдельности хранят файлы cookie (.AspnetCore.Cookies, .AspnetCore.Cookies1, .AspnetCore.Cookies2), но это только для этого сайта) Если я перехожу в другое приложение (где я не выполнил вход) Я получаю пустое там.

Любое предложение?

После Антона, предложение, это поведение: enter image description here

enter image description here

...