#oauth-2.0 #google-oauth #openid-connect #google-openid
#oauth-2.0 #google-oauth #OpenID-connect #google-OpenID
Вопрос:
В RFC 8628 не указано, что client_secret
параметр необходим для запроса токена доступа к устройству: https://datatracker.ietf.org/doc/html/rfc8628#section-3.4
Когда я делаю такой запрос с помощью Google API
$ curl --request POST
--url 'https://oauth2.googleapis.com/token'
--header 'content-type: application/x-www-form-urlencoded'
--data 'grant_type=urn:ietf:params:oauth:grant-type:device_code'
--data 'device_code=...'
--data 'client_id=...'
Я получаю следующую ошибку:
{
"error": "invalid_request",
"error_description": "Missing required parameter: client_secret"
}
Если я пройду client_secret
, это сработает.
Я был бы признателен, если бы кто-нибудь мог ответить на мои два вопроса:
- Почему Google API требуется
client_secret
для потока устройств? OAuth 2.0 для приложений для ТВ и устройств с ограниченным вводом не дает никаких объяснений. - Безопасно ли раскрывать
client_secret
, предполагая, что мой клиент принадлежит к типу «Идентификатор клиента для ТВ и ограниченный ввод»? Я предполагаю, что это обычно не рекомендуется, поэтому я хотел бы ограничить этот вопрос только Google API. Мое приложение можно загрузить, и секрет в основном жестко закодирован, поэтому доступен всем. Если секрет просочится, мне интересно, каковы последствия.
Ответ №1:
Вы отправляете запрос на стандартную конечную точку oauth2
https://oauth2.googleapis.com/token
В то время как конечная точка кода устройства
https://oauth2.googleapis.com/device/code
Просматривая эту страницу, поскольку вы используете стандартную конечную точку oauth2, вы, вероятно, подпадаете под этот раздел
Вместо этого раздела, который ожидал бы, что вы будете использовать конечную точку устройства.
Это пример, найденный на этой странице для использования с TVs and Limited Input devices
клиентом.
curl -d "client_id=client_idamp;scope=email profile"
https://oauth2.googleapis.com/device/code
Комментарии:
1. Привет! Спасибо за ответ. Извините, если я плохо сформулировал свой вопрос. Я могу отправить запрос на oauth2.googleapis.com/device/code конечная точка просто прекрасна. В документации позже предлагается, чтобы я опрашивал oauth2.googleapis.com/token конечная точка (которая входит в verification_url в ответе от oauth2.googleapis.com/device/code ) для подтверждения того, что пользователь предоставил доступ. Конечная точка токена требует client_secret, что, по-видимому, нарушает стандарт (RFC 8628).