IdentityServer4 .Net Core 3 TokenResponse Json является нулевым - PullRequest
0 голосов
/ 14 октября 2019

У меня есть этот код

class Program
{
    static async Task Main(string[] args)
    {
        HttpClient Client = new HttpClient();

        var disco = await Client.GetDiscoveryDocumentAsync("https://intranet.mycompany.com/");

        if (disco.IsError)
        {
             Console.WriteLine(disco.Error);
            return;
        }

        // request token
        var tokenResponse = await Client.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest
        {
            Address = disco.TokenEndpoint,
            ClientId = "Console",
            ClientSecret = "secret",
            Scope = "dev_api",
        });

        if (tokenResponse.IsError)
        {
            Console.WriteLine(tokenResponse.Error);
            return;
        }

        Console.WriteLine(tokenResponse.Json);
        Console.WriteLine("\n\n");
    }
}

Мы просто настроили intranet.mycompany.com на etc / host для обслуживания локального IP-адреса и настроили самозаверяющий сертификат. GetDiscoveryDocumentAsync работает нормально, он подключается к IdentityServer, но RequestClientCredentialsTokenAsync возвращает BAD REQUEST

{StatusCode: 400, ReasonPhrase: 'Bad Request', Version: 1.1, Content: System.Net.Http.HttpConnectionResponseContent, Headers:

{Cache-Control: без кэширования Pragma: без кэширования Transfer-Encoding: chunked Сервер: Microsoft-IIS / 10.0 Дата:Понедельник, 14 октября 2019 15:31:42 GMT Истекает: -1}}

Есть ли какие-либо рекомендации о том, как настроить идентификационный сервер 4 .core 3 в локальной сети по IP-адресу с самозаверяющим сертификатом? Я хочу создать демонстрационную инфраструктуру вне локального хоста для наших клиентов, чтобы впоследствии мы могли публиковать ее на сайте клиента.

1 Ответ

1 голос
/ 16 октября 2019

Так я случайно разобрался, как решить этот сценарий для локальной сети с HTTPS. У вас должен быть 1 самозаверяющий сертификат с именем localhost для использования на сервере идентификации. Класс запуска ConfigureServices

services.AddSigningCredential("CN=localhost");

Затем у вас должен быть другой самозаверяющий сертификат с именем your.local.domain *. 1007 * и настройте этот домен в файле etc / host. Вы также должны настроить свой веб-сервер с этим сертификатом для сайта сервера идентификации.

Если вы хотите подключиться к серверу идентификации с другого компьютера в вашей локальной сети, вам необходимо скопировать свой your.local.domain и установите его на этом компьютере. Также вам нужно настроить файл etc / host на этом компьютере для перенаправления на веб-сервер.

Пример etc / host на обеих машинах

192.168.0.1 your.local.domain

Ваш рабочий ULR для сервера идентификации будеткак то так

https://your.local.domain
...