Настройка: У нас есть приложение ASP.NET, размещенное на экземпляре IIS виртуальной машины. Привязки являются базовыми, без имени хоста, с использованием http и порта 80.
Проблема: Если Keycloak не применяется, веб-приложение может быть запущено на локальном хосте или http://VirtualMachineHostname. Однако, когда Keycloak применяется после аутентификации (экран входа), система войдет в цикл вызовов http://VirtualMachineHostname/signin-oidc и http://KeycloakServer.net:29480/realms/ ... VirtualMac hineHostname%2Fsignin-oidc&response_type=code%20id_token%20token&scope=openid%20profile&response_mode=form_post&nonce=
Я недостаточно хорошо разбираюсь в этой области, чтобы определить проблему. Кажется, что он получает токен, но затем при перенаправлении он зацикливается. Моя «кишка» подсказывает мне, что проблема заключается в том, что он пытается перенаправить обратно на «VirtualMachineHostname», но вместо этого нажимает «localhost», но URL-адрес перенаправления показывает «VirtualMachineHostname», как и ожидалось. Мы также не настраиваем явно вход в систему, позволяя это обрабатывать через пользовательский интерфейс Keycloak, в отличие от выхода из системы, у которого есть контроллер и связанные методы для очистки учетных данных и перенаправления после выхода из системы.
Настройки Keycloak
- Действительные URI перенаправления после выхода из системы = '+'
- Web Origins = '+'
- Действительные URI перенаправления = «http://localhost/» и «http://VirtualMachineHostname/»
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie(opt =>
{
opt.ExpireTimeSpan = TimeSpan.FromMinutes(Convert.ToInt32(Configuration["Keycloak:cookie-timeout"]));
})
.AddOpenIdConnect(options =>
{
options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.Authority = $"{Configuration["Keycloak:auth-server-url"]}realms/{Configuration["Keycloak:realm"]}";
options.ClientId = Configuration["Keycloak:resource"];
options.ResponseType = OpenIdConnectResponseType.CodeIdTokenToken;
options.UsePkce = true;
options.Scope.Add("profile");
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.RequireHttpsMetadata = false;
options.TokenValidationParameters = new TokenValidationParameters() { RoleClaimType = "roles" };
options.SignedOutCallbackPath = "/signout-callback-oidc";
});
var requireAuthPolicy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
services.AddAuthorizationBuilder().SetFallbackPolicy(requireAuthPolicy);
Подробнее здесь: https://stackoverflow.com/questions/797 ... entication
Мобильная версия