Почему Google OAuth API требует client_secret для потока устройств? Безопасно ли хранить секрет в приложении, которое можно загрузить?

#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 , это сработает.

Я был бы признателен, если бы кто-нибудь мог ответить на мои два вопроса:

  1. Почему Google API требуется client_secret для потока устройств? OAuth 2.0 для приложений для ТВ и устройств с ограниченным вводом не дает никаких объяснений.
  2. Безопасно ли раскрывать 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).