В таблице Applications
содержится OAuth2 client applications, которым разрешен использовать ваш сервер идентификации.
Добавление новой записи является обязательным при использовании интерактивных потоков, таких как authorization code или implicit, а клиентские приложения должны послать правильный client_id
: OpenIddict будет отклонить запрос на авторизацию, если client_id
отсутствует или не соответствовать которое вы полностью доверяете (т.е. приложение, хранящееся в таблице Applications
).
То же правило применяется к client credentials grant, что также требует действительного client_id
.
В отличие от этого, есть один случай, когда отправка client_id
не является обязательным: при использовании resource owner password credentials grant, как показано в блоге вы упомянули.
specification явно заявляет, что клиентское приложение, создающее запрос токена, может отправить его client_id
, что означает, что этот параметр не является обязательным.
Клиент МОЖЕТ использовать параметр запроса «client_id» для идентификации себя при отправке запросов на конечную точку маркера.
Когда client_id
не может быть извлечен из запроса на токен, OpenIddict не имеет возможности определить личность приложения. В этом случае ошибки, связанные с client_id
, пропускаются, и запрос обрабатывается без использования таблицы Applications
. Вот почему ваше приложение работает без необходимости заполнения таблицы Applications
.
Хотя полезно для целей лесозаготовок, послав client_id
не делает grant_type=password
запросы безопаснее, так как каждый может выдать себя ходатайство повторно использовать тот же client_id
, если приложение не был объявлен в качестве конфиденциальной и был назначен учетные данные клиента (только для «серверных приложений»). В этом случае злоумышленник не может отправить действительный запрос маркера, не зная client_secret
.
В OpenIddict, есть также один случай, когда добавление явной регистрации приложения полезно: при использовании introspection middleware для проверки токенов (вместо однонаправленных промежуточного JWT).
Как required by the specification, абоненты должны аутентифицировать использовать интроспекции конечную точку: если OpenIddict не может найти соответствующую запись в таблице Applications
, запрос будет отклонен и самоанализ промежуточного слоя никогда не будет работать.
Спасибо за подробный ответ. – Serg