Не удается аутентифицировать пользователя на сервере идентификации

#postgresql #asp.net-core #asp.net-identity #identityserver4

#postgresql #asp.net-core #asp.net-идентификация #identityserver4

Вопрос:

Я пытаюсь аутентифицировать пользователя на сервере идентификации 4 через / connect / token конечную точку. Я заполняю все необходимые поля в Postman:

  • grant_type ( тип предоставления )
  • Имя пользователя
  • Пароль
  • client_id
  • client_secret

и я всегда получаю ответ «invalid_client«.

Я вставил значения в следующие таблицы:

  • AspNetUsers
  • Клиенты
  • ClientGrantTypes
  • ClientSecrets

Для таблицы AspNetUsers в столбце PasswordHash я добавил хэшированный пароль, который хэшируется с помощью SHA256. В ClientGrantTypes я добавил GrantType со значением ‘password’ и вставил соответствующий идентификатор клиента.

Вот как выглядят мои конфигурационные сервисы:

 public void ConfigureServices(IServiceCollection services)
{
    string connectionString = "Server=192.168.1.108; Port=5432; Database=Users; User Id=postgres;Password=RandomPassword123";
    var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name;

    services.AddIdentityServer()
        .AddConfigurationStore(options =>
        {
            options.ConfigureDbContext = builder =>
            {
                builder.UseNpgsql(connectionString, action =>
                {
                    action.MigrationsAssembly(migrationsAssembly);
                });
            };
        })
        .AddAspNetIdentity<Users>().AddConfigurationStore(options=>
        {
            options.ConfigureDbContext = builder =>
            {
                builder.UseNpgsql(connectionString, action =>
                {
                    action.MigrationsAssembly(migrationsAssembly);
                });
            };
        }).AddDeveloperSigningCredential();


    services.AddEntityFrameworkNpgsql();
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
  

Я изо всех сил пытаюсь выяснить, что я делаю не так, поэтому буду признателен за любую помощь.

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

Я включил ведение журнала. Это скриншот того, что у меня есть в Postman:http://i.imgur.com/Sk78V2y.png

И это полный журнал сервера идентификации:

[21:25:46 Отладка] IdentityServer4.Hosting.Путь запроса EndpointRouter / подключение / токен, соответствующий токену типа конечной точки

[21:25:46 Отладка] IdentityServer4.Hosting.Включена конечная точка EndpointRouter: токен, успешно созданный обработчик: IdentityServer4.Конечные точки.Конечная точка токена

[21:25:46 Информация] IdentityServer4.Hosting.IdentityServerMiddleware вызывает конечную точку IdentityServer: IdentityServer4.Endpoints.Конечная точка токена для /connect /token

[21:25:46 Отладка] IdentityServer4.Конечные точки.TokenEndpoint запускает запрос токена.

[21:25:46 Отладка] IdentityServer4.Проверка.ClientSecretValidator Запускает проверку клиента

[21:25:46 Отладка] IdentityServer4.Проверка.BasicAuthenticationSecretParser начинает разбор базового секрета аутентификации

[21:25:46 Отладка] IdentityServer4.Проверка.Анализатор SecretParser обнаружил секрет: BasicAuthenticationSecretParser

[21:25:46 Отладка] IdentityServer4.Проверка.Найден секретный идентификатор SecretParser: Ryukote

[21:25:46 Отладка] IdentityServer4.EntityFramework.Магазины.В базе данных найдено клиентское хранилище Ryukote: False

[Ошибка 21:25:46] IdentityServer4.Проверка.ClientSecretValidator Клиент с идентификатором ‘Ryukote’ не найден. прерывание

Журнал сбивает меня с толку, потому что есть вещи, которые не соответствуют действительности. Это можно подтвердить, посмотрев на предоставленный мной скриншот Postman.

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

1. Служба вывода на консоль службы идентификации log file service предоставит вам дополнительную информацию о том, почему клиент недействителен.

2. Спасибо. Я включил ведение журнала и получил странный журнал. Я вставлю журнал и то, что у меня есть в Postman, в исходное сообщение.

Ответ №1:

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

 Authorization: Basic Ryukote:password
  

Именно отсюда IdentityServer получает идентификатор клиента ‘Ryukote’.

Удалите заголовок авторизации из вашего запроса.

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

1. Да, но у меня все еще есть ошибка недопустимого клиента, но на этот раз с другими выводами журнала. [17:38:39 Отладка] IdentityServer4.Проверка. В HashedSharedSecretValidator для клиента не настроен общий секрет. [17:38:39 Отладка] IdentityServer4.Проверка. Валидаторам SecretValidator не удалось проверить секрет [Ошибка 17:38:39] IdentityServer4.Проверка. Не удалось выполнить проверку секретности клиента ClientSecretValidator для клиента: randomclient.

2. Ошибка в No shared secret configured for client . Вы настроили общий секрет для randomclient ? Можете ли вы добавить конфигурацию клиента к своему вопросу?

3. i.imgur.com/lz7oYO7.png это значение SHA256 является «секретным» в обычном тексте. Он указывает на идентификатор клиента «1», который я также определил, и это «randomclient».