Подключение настольного приложения к Google Фото без раскрытия секретного ключа приложения - PullRequest
1 голос
/ 17 июня 2020

Я пишу автономное настольное приложение с открытым исходным кодом на Java, которое обрабатывает фотографии, и я добавляю функцию, позволяющую пользователям загружать изображения в свою учетную запись Google Фото, но я столкнулся с аутентификацией / security question.

Я зарегистрировал свой проект для использования Google Photo API и загрузил файл JSON с моими учетными данными. Мне удалось успешно использовать его с образцами из проекта java -photoslibrary Github, так что все в порядке.

Однако файл учетных данных содержит ключ client_secret которые, если не ошибаюсь, не следует раскрывать (здесь я прав?). Но эти учетные данные должны каким-то образом распространяться вместе с приложением, и, поскольку оно имеет открытый исходный код, в основном будет publi c. Итак, мой вопрос: как я могу аутентифицировать пользователя моего приложения в его / ее учетной записи Google Photo, не раскрывая секретный ключ моего приложения?

Примечание. Я интегрировал загрузку Dropbox, и их процедура для настольных приложений четко объясняет, как для аутентификации без встраивания секретного ключа в настольное приложение с использованием потока токенов OAuth. Есть ли эквивалент для Google Фото?

Спасибо.

Edit: добился некоторого прогресса (см. Мой собственный ответ ниже), но после того, как у меня наконец появилось время его реализовать, я понял, что после пользователя авторизовал приложение, и был возвращен действительный код (Ура!), шаг 5 (замена кода на токен) снова требует client_secret! : - (

Я пробовал позвонить без него, но получаю сообщение об ошибке «client_secret is missing», так что это не опечатка.

После повторного поиска (с помощью [google-oauth ] вместо [oauth-2.0], что говорит само за себя), кажется, что «секрет» не означает, что он на самом деле «секретный» в мире Google. Другими словами, это нормально встраивать его в свои приложения, потому что, ну, это секрет, но его нельзя использовать злонамеренно (надеюсь) ...

См. ответы на следующие вопросы:

Одна страница Google даже упоминает, что «В этом контексте секрет клиента, очевидно, не рассматривается как секрет».

Заходите в Google, объясните мне, как работает безопасность: -)

1 Ответ

0 голосов
/ 19 июня 2020

Хорошо, я думаю, что нашел ответ.

Подобно Dropbox, Google может использовать OAuth 2 с PKCE, они просто используют полное написание «Proof Key for Code Exchange», вероятно, поэтому я не найди сначала :-). Подробности здесь: https://developers.google.com/identity/protocols/oauth2/native-app#obtainingaccesstokens

Я не нашел эквивалентного процесса в API Google, но эти API представляют собой мегабайты классов, поэтому я мог его пропустить. По сути, все, что для этого требуется, - это просто отправить несколько запросов и прослушать ответ, поэтому я думаю, что буду реализовывать его с нуля (и, вероятно, также избавлюсь от клиентских библиотек Dropbox, поскольку процесс очень похож).

Надеюсь, это поможет ...

Изменить: это не касается сути, потому что после чистой процедуры PKCE приложение все еще должно отправить свой закрытый ключ для обмена кода авторизации на токен. См. Отредактировать в моем вопросе

...