Я пишу на Java автономное настольное приложение с открытым исходным кодом, которое обрабатывает фотографии, и добавляю функцию, позволяющую пользователям загружать изображения в свою учетную запись Google Фото, но столкнулся с вопросом аутентификации/безопасности.
Я зарегистрировал свой проект для использования Google Photo API и загрузил файл JSON с моими учетными данными. Мне удалось успешно использовать его с примерами из проекта java-photoslibrary Github, так что все хорошо.
Однако в файле учетных данных содержится ключ client_secret, который, если я не ошибаюсь, не следует разглашать (здесь я прав?). Но эти учетные данные должны каким-то образом распространяться вместе с приложением, и, поскольку оно имеет открытый исходный код, оно будет в основном общедоступным. Итак, мой вопрос: как я могу аутентифицировать пользователя моего приложения в его / ее учетной записи Google Photo, не раскрывая секретный ключ моего приложения?
Примечание. Я интегрировал загрузку в Dropbox, и их процедура для настольных приложений четко объясняет, как пройти аутентификацию без внедрения секретного ключа в настольное приложение с использованием потока токенов OAuth. Есть ли аналог для Google Фото?
Спасибо.
Редактировать: достигнут некоторый прогресс (см. мой собственный ответ ниже), но после того, как у меня наконец появилось время для его реализации, я понял, что после того, как пользователь авторизовал приложение и был возвращен действительный код (ура!), шаг 5 (обмен кодом для токена) снова требуется client_secret ! :-(
Я пробовал звонить без него, но получаю сообщение об ошибке client_secret ismissing, так что это не опечатка.
После дополнительного поиска (с ключевым словом [google-oauth] вместо [oauth-2.0], что говорит само за себя), кажется, что секрет не означает, что он на самом деле секретен в мире Google. Другими словами, это нормально встраивать его в ваши приложения, потому что, ну, это секрет, но его нельзя использовать злонамеренным образом (надеюсь)...
См. ответы на эти связанные вопросы:
- Безопасное распространение OAuth 2.0 client_secret в настольных приложениях на Питоне
- Почему Google предоставляет секрет клиента для Native? приложение?
- Интеграция oauth2 с собственным мобильным приложением (iOS/Android)
На на одной странице Google даже упоминается, что в этом контексте секрет клиента явно не рассматривается как секрет.
Давай, Гугл, объясни мне, как работает безопасность :-)