У меня проблема с единой регистрацией на сервере 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), но это только для этого сайта) Если я перехожу в другое приложение (где я не выполнил вход) Я получаю пустое там.
Любое предложение?
После Антона, предложение, это поведение: