Как предоставить аутентифицированным пользователям веб-сайтов (стандарт App Engine) доступ к корзине Google Cloud Storage?

Я развернул веб-приложение java8 в стандарте Google App Engine. В настоящее время у меня есть интеграция с Oauth2, я могу получить адрес электронной почты пользователей, token_id и т. д. Процесс регистрации пользователей очень стандартный (даже с Oauth2). По сути, это заставляет пользователя либо добавить свой адрес электронной почты / пароль, либо зарегистрироваться с помощью входа в Google. У меня есть каталоги и файлы в Google Cloud Storage, к которым я хочу разрешить доступ «аутентифицированным» пользователям. Что значит:

  • а) Если их имя пользователя / пароль совпадает с тем, что у меня есть в mysql db или
  • б) Если я найду их учетные данные для входа в Google в базе данных

Я перенаправляю их на сервлет, который представляет все файлы на защищенной веб-странице в виде ссылок, по которым пользователь может щелкнуть / открыть документы. Я понимаю, как запрашивать авторизацию на ресурсах Google, которыми может владеть пользователь. Что мне нужно знать, так это как «предоставить» пользователю (пользователю Google или обычному пользователю, который регистрируется на сайте) доступ к файлам в корзине Google Cloud Storage?

Если я не предоставлю Storage Object Reader «аллюзерам», я получу:

<Error>
<Code>AccessDenied</Code>
<Message>Access denied.</Message>
<Details>
Anonymous caller does not have storage.objects.get access to drmath.appspot.com/1a/index.html.
</Details>
</Error>
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
92
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Google OAuth не подходит для ваших требований по предоставлению доступа к Google Cloud Storage. Их адрес электронной почты (User Identity) необходимо добавить в качестве пользователя в ваш Google Cloud IAM.

Что вы можете сделать, так это создать подписанные URL-адреса. Это URL-адреса с временным доступом, срок действия которого истекает. Код вашего внутреннего сервера сгенерирует URL-адрес, и затем пользователь сможет временно получить прямой доступ к объекту облачного хранилища.

Ваш бэкэнд определит, что пользователь авторизован любым способом, который вы хотите, включая использование OAuth, базы данных и т. д.

Создание подписанных URL-адресов с помощью вашей собственной программы

Подписанные URL

Позвольте мне спросить: могу ли я предоставить приложению право на просмотр? Другими словами, я просто буду использовать пользовательские сеансы для защиты страницы, но когда приложение обращается к Google Cloud Storage, оно отображает файлы? Что мне не нравится в подписанных URL-адресах, так это: «Любой, у кого есть URL-адрес, имеет доступ, предоставленный по URL-адресу».

gbouras 19.12.2018 00:32

При предоставлении доступа к облачному хранилищу понятие application отсутствует. У вас либо есть учетные данные (учетная запись пользователя или службы), либо вы подписали URL-адреса (которые получены из учетных данных). Чтобы предоставить view чему-либо, требуется учетная запись IAM в Google Cloud.

John Hanley 19.12.2018 00:36

Я добавил свой адрес электронной почты и предоставил следующее:

gbouras 19.12.2018 02:14

Извините, я отвлекся на другие сообщения - URL-адрес токенизируется, когда вы добавляете безопасность в корзину, поэтому я думаю, что это не сработает, поэтому я приостановился в завершении своего комментария. Что также, похоже, означает, что подписанные URL-адреса тоже не будут работать. Мне нужно, чтобы структура оставалась целостной, каждая «папка» по сути является мини-сайтом. Может, мне просто нужно использовать хранилище файлов.

gbouras 19.12.2018 03:15

Firestore не предоставит вам такой уровень авторизации. Единственная идея, которая у меня есть, - реализовать вашу собственную авторизацию в базе данных, сохранить ее в сеансе с клиентом и отслеживать, где на ваших многоуровневых мини-сайтах пользователь имеет доступ. Это очень распространенная вещь в PHP, поэтому вы сможете найти множество примеров в Google. Это может показаться сложным, но на самом деле это не так. Проблема, которую я вижу, заключается в том, как авторизовать Google Cloud Storage без использования общедоступных или подписанных URL-адресов и без передачи этих данных через ваш веб-сервер.

John Hanley 19.12.2018 03:25

Я думал о файловом хранилище cloud.google.com/filestore, потому что это просто nfs. Но я согласен с вами, и, вероятно, лучшее решение - это то, что вы изложили. Эти мини-сайты на самом деле представляют собой просто преобразованные слайды PowerPoint, но на самом деле с технической точки зрения это мини-сайт. С точки зрения пользователя, это слайд-шоу, поэтому не должно быть ничего сложного. Я ценю ваш вклад, приятно, когда вы можете поделиться своими идеями. Я оставлю это еще на один день, а потом просто помечу ваше решение как правильное, если к тому времени ни у кого не будет волшебного решения. Я ценю ответы и рекомендации.

gbouras 19.12.2018 03:34

Извините за Firestore по сравнению с Filestore. Одно маленькое письмо и совсем другое обслуживание. Filestore также не поможет вам, поскольку доступ осуществляется через ваш экземпляр, который, конечно, уже имеет доступ (за исключением повторной реализации IAM).

John Hanley 19.12.2018 03:57

Другие вопросы по теме