Почему не нужен секрет клиента для OAuth из Javascript?
Хорошей новостью является то, что я следовал официальному руководству по доступу к Google Drive REST API через Javascript, и это сработало. Тем не мение, client_id
но не client_secret
используется в коде.
/**
* Check if current user has authorized this application.
*/
function checkAuth() {
gapi.auth.authorize(
{
'client_id': CLIENT_ID,
'scope': SCOPES.join(' '),
'immediate': true
}, handleAuthResult);
}
При регистрации приложения мне дали client_secret
который никогда не был использован. should't client_secret
быть разосланным в auth_token
запрос как объяснил здесь и здесь?
Как уже упоминалось в комментарии ниже, я прекрасно понимаю, что client_id
является публичным, а не client_secret
, Что меня удивляет, так это то, как Google OAuth 2.0 работает, несмотря на то, что не использует client_secret
чтобы получить auth_token
, Разве это не предписано спецификацией OAuth 2.0? Что мешает вредоносному приложению выдавать себя за легитимное?
Я могу установить localhost:8000
как мое происхождение Javascript.
1 ответ
И идентификатор клиента, и секрет клиента используются для идентификации вашего приложения. Идентификатор клиента является публичной информацией и может быть показан пользователям. В то время как секрет должен храниться в секрете, иначе кто-либо может эффективно использовать ваши учетные данные приложения.
JavaScript на стороне клиента, поэтому если вы просматриваете источник на странице, вы можете видеть идентификатор клиента. Если бы ваш код также содержал секрет, они бы тоже это увидели и смогли его использовать.
Я подозреваю, что именно по этой причине нам нужно использовать JavaScript, иначе он добавляет дополнительный уровень безопасности вместо использования секрета в приложениях JavaScript.
Сервер авторизации выдает зарегистрированному клиенту идентификатор клиента - уникальную строку, представляющую регистрационную информацию, предоставленную клиентом. Идентификатор клиента не является секретом; он предоставляется владельцу ресурса и НЕ ДОЛЖЕН использоваться отдельно для аутентификации клиента. Идентификатор клиента является уникальным для сервера авторизации.
Русский: консоль разработчика Google регистрирует приложение (клиент), создавая уникальную строку для идентификации этого клиента (проекта). Идентификатор клиента не является секретным и должен быть показан владельцу данных.
4.1. Насколько я вижу, предоставление кода авторизации Секрет клиента не является обязательной частью обмена кодом авторизации.