OAuth 2.0 для межсерверных приложений: два или три параметра? (Или: могут ли некоторые инженеры Google не считать до трех? :)

Я пытаюсь получить токен доступа Google OAuth 2.0 для сервисного аккаунта, но вместо этого получаю invalid_grant ошибку. Я проверил свои различные артефакты (закрытый ключ и т. д.) и синхронизацию часов, но пока не смог решить эту проблему.

Есть один, возможно, связанный элемент, который кажется странным: в документации Google говорится

В HTTP-запросе POST требуются три параметра, они показаны ниже.

Далее следует таблица с двумя строками, в которых указаны два параметра (grant_type и assertion). Может быть, нужен и третий (я видел примеры, в которых тоже каким-то образом используется assertion_type)? Может ли быть так, что (некоторые) инженеры Google (или, возможно, ваш покорный слуга) не умеют считать до трех? :)

Подводя итог: каковы подходящие параметры? Это кажется неясным из текущей документации Google.

ОБНОВЛЕНИЕ: Вот дополнительная информация: я не могу использовать клиентскую библиотеку Google API, поскольку для моего приложения требуется язык, отличный от тех, которые в настоящее время не поддерживаются Google. Поэтому я должен реализовать логику для создания и подписания JWT и т. д., что обычно не рекомендуется. Я подтвердил, что артефакты моей учетной записи службы в порядке: я могу использовать их с клиентской библиотекой API Google для Java для доступа к тому же календарю (т.е. не с моей целевой платформы). В частности, мой «client_id» имеет вид «[email protected]», а мой ключ — это 128-битный закрытый ключ RSA, оба полученные из Панель инструментов Google API.


person Drux    schedule 16.04.2013    source источник


Ответы (1)


Теперь я смог подтвердить, что это два параметра, а не три. документация Google кажется правильной, поскольку она называет эти два параметра (grant_type и assertion), но неправильно, поскольку он ссылается на них как на три параметра.

Доказательства для двух параметров взяты из текущего Internet-Draft (Профили токенов носителя JSON Web Token (JWT) для OAuth 2.0), который определяет тип предоставления расширения в разделе RFC 6749 (Структура авторизации OAuth 2.0).

Доказательства также состоят в том, что я попробовал токен доступа, полученный клиентской библиотекой API Google (и выявленный путем регистрации) внутри моей (не Java) реализации: использование этого токена доступа устранило ошибку invalid_grant.

(Теперь, очевидно, в моем коде осталась проблема с формированием подписи SHA256withRSA, но это уже другая проблема...)

person Drux    schedule 18.04.2013