Здравствуйте, впервые пишу API, а тем более авторизацию пользователей через него. Читал
OAuth2 RFC, и как работает протокол понимаю, в rfc довольно наглядные две иллюстрации и описание к ним. Однако нагуглить решение и поискать на тостере/хабра - не удалось. Везде в основном описание на русском языке того же что и в rfc, без конкретных пояснений и реализаций.
Не могу понять как авторизовать простого пользователя, который судя по RFC так же и является клиентом? (в общем простая авторизация пользователя на сайте login:password).
Как авторизовать стороннее приложение для просмотра/модификации данных resource owner'a - понимаю.
Вот что есть в RFC на этот счет:
1.3.3. Resource Owner Password Credentials
The resource owner password credentials (i.e. username and password)
can be used directly as an authorization grant to obtain an access
token. The credentials should only be used when there is a high
degree of trust between the resource owner and the client (e.g. the
client is part of the device operating system or a highly privileged
application), and when other authorization grant types are not
available (such as an authorization code).
Even though this grant type requires direct client access to the
resource owner credentials, the resource owner credentials are used
for a single request and are exchanged for an access token. This
grant type can eliminate the need for the client to store the
resource owner credentials for future use, by exchanging the
credentials with a long-lived access token or refresh token.
1.3.4. Client Credentials
The client credentials (or other forms of client authentication) can
be used as an authorization grant when the authorization scope is
limited to the protected resources under the control of the client,
or to protected resources previously arranged with the authorization
server. Client credentials are used as an authorization grant
typically when the client is acting on its own behalf (the client is
also the resource owner), or is requesting access to protected
resources based on an authorization previously arranged with the
authorization server.
Из этого следует что нужно при регистрации пользователей регистрировать их также как клиентов с полными правами, и потом в запросах проверять полученный таким путем access_token. Однако как мне кажется что это не правильное решение из-за того что как минимум есть оверхед: регистрация пользователя, регистрация клиента, связать их (без подтверждения пользователя), сгенерировать auth_key, сгенерировать access_token и resfresh_token, вернуть их.
Не могли бы вы подсказать детали реализации и поставить на путь истинный?
UPD:
Нашел похожий по смыслу вопрос на
SO, однако там так же нет корректного ответа.
К основному вопросу добавляю еще один вариант реализации авторизации пользователей на своем же сайте. В качестве приложения(client) регистрируем наш сайт, и при регистрации всех пользователей добавляем их к нашему приложению. А дальше уже получаем токен, и отдаем его пользователю.