Как секрет клиента поможет в случае создания / проверки identityserver4? - PullRequest
0 голосов
/ 24 мая 2018

Я попробовал IdentityServer4 с ClientSecret и с помощью access token для доступа к веб-API.Это сработало очень круто, но теперь меня беспокоит одна вещь.Для меня процесс выглядит следующим образом:

  1. Клиент (консольное приложение в моем случае) использует client id и client secret, чтобы получить access token из /connect/token пути, который, в свою очередь, получает из /.well-known/openid-configuration путь.
  2. Auth server проверить и подписать токен, используя временный ключ подписи - закрытый ключ (я использую временный ключ подписи разработчика).
  3. Resource server получение открытого ключа от ./хорошо известная / openid-конфигурация для проверки токена доступа.Я ссылаюсь с на этот

Сервер авторизации будет подписывать токены ключом.Сервер (ы) ресурсов должен проверить целостность токена с помощью ключа.Вместе они образуют асимметричную (например, открытый / закрытый) пару ключей.По умолчанию IdentityServer публикует открытый ключ для проверки токенов в конечной точке /.well-known/openid-configuration.

Resource server вернуть код состояния 401 или соответствующие данные независимо от того, подтвержден ли токен доступа.

Поэтому мой вопрос заключается в том, что для подписи токена доступа и его проверки используется только асимметричный ключ.Зачем нам секрет клиента?И если нам это понадобится, куда будет выслан секрет клиента через процесс авторизации?

Извините за плохой английский :) Спасибо.

1 Ответ

0 голосов
/ 24 мая 2018

Я попытаюсь прояснить ситуацию немного.

В вашем случае ваш клиент - консольное приложение, а это значит, что вам нужен тип предоставления client credentials.Согласно документации :

Это самый простой тип предоставления и используется для обмена данными между серверами - токены всегда запрашиваются от имени клиента, а не пользователя.

Итак, вы получаете access token от имени самого клиента (вашего консольного приложения).И:

Клиент, как правило, должен проходить аутентификацию на конечной точке токена, используя его идентификатор клиента и секрет.

И если вы подумаете об этом, это действительно имеет смысл -самого ID клиента недостаточно (как упомянуто в комментариях - вы не можете войти на сайт только с именем пользователя, вам также нужен пароль).

Теперь при использовании некоторых типов грантов этотребовать учетные данные пользователя ( неявный , Hybrid ), тогда вам не нужно указывать client secret (при выполнении запроса), но это потому, что пользователь вводит свое имя пользователя и пароль.

В этом случае вы получаете access token от имени вошедшего в систему пользователя .

PS: Как и FYI - в вашем консольном приложении вытакже может получать access token от имени пользователя, но вам нужно переключить подход с client credentials тип предоставления на пароль владельца ресурса , и при выполнении запроса к конечной точке токена вам необходимоуказать имя пользователя и пароль.

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