IdentityServer4 с ADFS в качестве внешнего поставщика удостоверений

#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?