#identityserver4 #openid-connect #adfs4.0
#identityserver4 #OpenID-connect #adfs4.0
Вопрос:
У меня ASP.NET Тестовое приложение MVC, которое должно работать как неявный клиент OIDC, имеющий токены доступа и идентификатора из приложения IdentityServer4 (оба являются ядром dotnet 3.1). В IdSvr настроено несколько внешних IDP OIDC: экземпляр KeyCloak и аналогичный ADFS (4.0).
Моя конфигурация IdSvr ADFS выглядит следующим образом:
.AddOpenIdConnect("oidc_adfs", "ADFS", options =>
{
options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
options.SignOutScheme = IdentityServerConstants.SignoutScheme;
options.SaveTokens = true;
options.Authority = "<<ADFS endpoint>>";
options.ClientId = "<<ADFS defined client id>>";
options.ClientSecret = "<<ADFS defined client secret>>";
options.Resource = "<<My resource identifier in ADFS>>";
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name",
RoleClaimType = "role"
};
options.ResponseType = "id_token";
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("openid");
options.Scope.Add("profile");
});
В случае с KeyCloak все идет нормально — запрос обратного вызова к IdSvr «/ signin-oidc» проходит нормально, и пользовательский агент переднего канала завершается в конечной точке тестового приложения назначения после авторизации, и токены доступны.
Когда я использую ADFS, поток останавливается с HTTP 500 после аутентификации пользователя в ADFS, и попадает конечная точка «/ signin-oidc», и журнал IdSvr считывает:
Запрос CORS был сделан для path: /signin-oidc из источника: <<ADFS_endpoint>> но был проигнорирован, поскольку путь не был для разрешенной конечной точки CORS сервера идентификации 2020-09-20 12:34:01.157 02:00 [ INF] Ошибка удаленной аутентификации: не удалось снять защиту с сообщения.Состояние..
Я настроил CORS в соответствии с документами IdentityServer4, так что проблема может быть в чем-то другом?
При проверке различий в запросах обратного вызова KeyCloak и ADFS на «/ signin-oicd» я вижу, что ADFS добавляет Referer / Origin к запросу, а KeyCloak — нет. Помимо этого, два запроса кажутся довольно похожими.
Надеюсь, кто-нибудь может помочь.
Ответ №1:
Если вы видите исходный заголовок из ADFS, то, я думаю, вам нужно добавить домен ADFS в список разрешенных конечных точек CORS.
Ответ №2:
Какая ошибка отображается в журнале событий ADFS?
Проблема также может заключаться в том, что ADFS 4.0 не поддерживает CORS?