Ошибка подключения к http://localhost:8000/.well-known/openid-configuration/jwks. Ссылка на объект не установлена ​​для экземпляра объекта - PullRequest
0 голосов
/ 11 октября 2019

Я размещаю свой идентификационный сервер, используя адрес http://10.2.5.90:8000 и использую карту nginx https://10.2.5.90:8888 до http://10.2.5.90:8000.

Когда я пытался запросить документ об обнаружении, например быстрый запуск в клиенте, "Ошибка подключения к http://localhost:8000/.well-known/openid-configuration/jwks. Ссылка на объект не установлена ​​для экземпляра объекта .." .

Я пытался изменить эмитента наАдрес https и используется настроенный DiscoveryDocumentRequest. Но это не сработало.

Когда я удаляю nginx и получаю доступ http://10.2.5.90:8000, Работает хорошо.

IdentityServer: Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    // ...other codes
    var builder = services.AddIdentityServer(options =>
    {
        options.Events.RaiseErrorEvents = true;
        options.Events.RaiseInformationEvents = true;
        options.Events.RaiseFailureEvents = true;
        options.Events.RaiseSuccessEvents = true;

        options.IssuerUri = "https://10.2.5.90:8888";
    });
    // ...other codes
}

Клиент: Program.cs

private static async Task<string> GetAccessTokenAsync()
{
    var client = new HttpClient();
    var req = new DiscoveryDocumentRequest
    {
        Address = "https://10.2.5.90:8888",
        Policy = new DiscoveryPolicy
        {
            ValidateIssuerName = false,
            ValidateEndpoints = false,
        }
    };
    var disco = await client.GetDiscoveryDocumentAsync(req);
    if (disco.IsError)
    {
        Console.WriteLine(disco.Error);
        // output: Error connecting to http://localhost:8000/.well-known/openid-configuration/jwks. Object reference not set to an instance of an object..
        return null;
    }

    // ...other codes
}


Редактировать:

Я изменил код при настройке сервера идентификации и он работает при запуске обнаружения.

var builder = services.AddIdentityServer(options =>
{
    options.PublicOrigin = "https://10.2.5.90:8888";
});

Однако я все еще не мог получить доступ к своему API. Ошибка: Исключительная ситуация при обработке сообщения. IDX20803: Невозможно получить конфигурацию из: 'http://localhost:8000/.well-known/openid-configuration', и я исследую решение

1 Ответ

0 голосов
/ 15 октября 2019

Вы должны изменить свойство de Authority в вашем API. API должен получить доступ к конечной точке обнаружения через nginx (порт 8888):

services.AddAuthentication("Bearer")
    .AddJwtBearer(options =>
    {
        options.Audience = "api1";
        options.RequireHttpsMetadata = true;
        options.Authority = "https://10.2.5.90:8888";
    });

Если у вас есть общедоступный IP-адрес, а внутренняя ферма использует внутренний URI, вы можете настроить данные URI хоста в промежуточном программном обеспечении. Попробуйте поставить это промежуточное ПО на первое место:

app.Use(async (context, next) =>
{
    context.Request.Scheme = "https";
    context.Request.Host = new HostString("10.2.5.90.8888");
    context.Request.PathBase = "yourApplicationPathBase";

    await next.Invoke();
});

Конечно, вы должны параметризовать эти строки в зависимости от среды вашей конфигурации.

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