Сервер идентификации 4 ASP.NET Быстрый запуск «отказано в соединении»

#asp.net #api #identityserver4

#asp.net #API #identityserver4

Вопрос:

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

В нем говорится (в переводе с немецкого), что целевому компьютеру отказано в подключении. Что странно в этом, так это то, что в проекте API «мы» (я) сказали ValidateAudience = false , что, как я думал, означало, что токены вообще не проверяются.

 // call api
var apiClient = new HttpClient();
apiClient.SetBearerToken(tokenResponse.AccessToken);

var response = await apiClient.GetAsync("https://localhost:6001/identity");
if (!response.IsSuccessStatusCode)
{
    Console.WriteLine(response.StatusCode);
}
else
{
    var content = await response.Content.ReadAsStringAsync();
    Console.WriteLine(JArray.Parse(content));
}
  

Я действительно в замешательстве.Клиент действительно получает accessToken, так что это не проблема… Я надеюсь.

Github-Repo

 Invoking IdentityServer endpoint: IdentityServer4.Endpoints.TokenEndpoint for /connect/token

[16:15:42 Debug] IdentityServer4.Endpoints.TokenEndpoint
Start token request.

[16:15:42 Debug] IdentityServer4.Validation.ClientSecretValidator
Start client validation

[16:15:42 Debug] IdentityServer4.Validation.BasicAuthenticationSecretParser
Start parsing Basic Authentication secret

[16:15:42 Debug] IdentityServer4.Validation.PostBodySecretParser
Start parsing for secret in post body

[16:15:42 Debug] IdentityServer4.Validation.ISecretsListParser
Parser found secret: PostBodySecretParser

[16:15:42 Debug] IdentityServer4.Validation.ISecretsListParser
Secret id found: client

[16:15:42 Debug] IdentityServer4.Stores.ValidatingClientStore
client configuration validation for client client succeeded.

[16:15:42 Debug] IdentityServer4.Validation.ISecretsListValidator
Secret validator success: HashedSharedSecretValidator

[16:15:42 Debug] IdentityServer4.Validation.ClientSecretValidator
Client validation success

[16:15:42 Debug] IdentityServer4.Validation.TokenRequestValidator
Start token request validation

[16:15:42 Debug] IdentityServer4.Validation.TokenRequestValidator
Start client credentials token request validation

[16:15:42 Debug] IdentityServer4.Validation.TokenRequestValidator
client credentials token request validation success

[16:15:42 Information] IdentityServer4.Validation.TokenRequestValidator
Token request validation success, {"ClientId": "client", "ClientName": null, "GrantType": "client_credentials", "Scopes": "api1", "AuthorizationCode": null, "RefreshToken": null, "UserName": null, "AuthenticationContextReferenceClasses": null, "Tenant": null, "IdP": null, "Raw": {"grant_type": "client_credentials", "scope": "api1", "client_id": "client", "client_secret": "***REDACTED***"}, "$type": "TokenRequestValidationLog"}

[16:15:42 Debug] IdentityServer4.Services.DefaultClaimsService
Getting claims for access token for client: client

[16:15:42 Debug] IdentityServer4.Endpoints.TokenEndpoint
Token request success.
  

Комментарии:

1. ПРИМЕЧАНИЕ: похоже, что это какая-то проблема с портом?

Ответ №1:

Я думаю, что установка ValidateAudience = false просто проигнорирует требование аудитории, но все равно проверит другие вещи в токене.

Вы можете установить для свойства IncludeErrorDetails значение true и вот так:

         .AddJwtBearer(options =>
        {

            options.Audience = "payment";
            options.Authority = "https://localhost:6001/";

            //True if token validation errors should be returned to the caller.
            options.IncludeErrorDetails = true;
  

Когда вы установите для него значение True, вы получите более подробную информацию в заголовке ответа, например:

 HTTP/1.1 401 Unauthorized
Date: Sun, 02 Aug 2020 11:19:06 GMT
WWW-Authenticate: Bearer error="invalid_token", error_description="The signature is invalid"
  

Чтобы еще больше помочь вам, пожалуйста, опубликуйте образец токена доступа и конфигурации API (класс запуска)

Смотрите эту статью для получения дополнительной информации

Комментарии:

1. где именно они будут отображаться? также теперь я включил ссылку на репозиторий github

2. Вы получаете WWW-аутентификацию в ответе от API, который получает токен доступа (если вы используете AddJwtBearer)

3. Я исправил опечатку в своем ответе и также добавил ссылку

4. хм, для меня это все еще просто выдает ошибку в client.program

5. вы не видите заголовок ответа с некоторыми подсказками? также вы можете посмотреть журналы.

Ответ №2:

Итак, в API / Properties / lauchsettings …. при создании проекта он использовал схему по умолчанию, и в этой схеме он устанавливает порт 43033 или что-то в этом роде

Комментарии:

1. У меня также была аналогичная проблема — IIS Express был настроен на другом порту, поэтому, когда я запустил приложение, на порту 5000/5001 ничего не было доступно