#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».