Вызов сервера идентификации Это собственная конечная точка конфигурации - PullRequest
0 голосов
/ 22 января 2019

У меня есть два клиента, требующие аутентификации.

Один клиент - это spa, который использует неявный поток, а другой - прямую системную интеграцию, которая использует поток учетных данных клиента для входа в систему.

По какой-то причине, когда мой клиентский клиентский мандат вызывает мой API, мое приложение Identity Server пытается вызвать конечную точку .well_known/openid-configuration для себя.

Вызов не имеет смысла, поскольку сервер, который в первую очередь обслуживает конфигурацию, пытается вызвать конечную точку сам по себе.

Есть ли способ заполнить эту конфигурацию, не заставляя сервер идентификации вызывать собственную конечную точку?

Ниже приведен фрагмент с моей конфигурацией сервера идентификации.

services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = "Bearer";
            options.DefaultChallengeScheme = "oidc";
        }).AddOpenIdConnect("oidc", options =>
        {
            options.SignInScheme = openIdConnectConfig.SignInScheme;
            options.SignOutScheme = IdentityServerConstants.SignoutScheme;

            options.Authority = openIdConnectConfig.Authority;
            options.RequireHttpsMetadata = false;

            options.ClientId = clientConfig.First(x => x.ClientId == "spa_app").ClientId;

            options.SaveTokens = true;
            options.SignedOutRedirectUri = "http://localhost:8080";
        }).AddIdentityServerAuthentication(options =>
        {
            options.Authority = openIdConnectConfig.Authority;
            options.RequireHttpsMetadata = false;

            options.ApiName = "api_client";
        });

1 Ответ

0 голосов
/ 22 января 2019

Невозможно предотвратить это поведение (по крайней мере, если вы не попытаетесь реализовать IConfigurationManager<OpenIdConnectOptions>). Это на самом деле предполагаемое поведение, потому что ваше веб-приложение и сервер идентификации размещены в одном приложении. Вызов ее собственной конечной точки происходит из-за схемы аутентификации AddOpenIdConnect, которая при запуске приложения извлекает информацию метаданных провайдера идентификации для целей проверки JWT.

Теоретически можно пойти и реализовать IConfigurationManager<OpenIdConnectOptions>, который не вызывает конечную точку MetadataAddress, и установить это в построителе схемы аутентификации.

.AddOpenIdConnect("oidc", options =>
        {
            ...
            ConfigurationManager = myCustomConfigurationManager,  //You would need to implement this
            ...
        })

Это виновник, который отвечает за вызов к конечной точке MetadataAddress, которая по умолчанию authorityUri + /.well_known/openid-configuration.

Я бы не советовал этого делать, потому что в конце концов вам понадобится информация о метаданных провайдера идентификации, так что придется снимать и сохранять ее локально или что-то в этом роде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...