#javascript #ajax #google-apps-script #oauth-2.0 #google-oauth
#javascript #ajax #google-apps-script #oauth-2.0 #google-oauth
Вопрос:
Мне нужно получить доступ к скрипту Google Apps в AJAX, которому требуется авторизация от пользователя для отправки электронной почты из его учетной записи GMail. По разным причинам я должен отправить это электронное письмо из скрипта Google Apps.
Вызов выполняется из моего веб-приложения, размещенного на моем сервере. Я также использую Google Signin аутентификацию. Я попытался включить gmail в области авторизации My web app, но этого недостаточно, потому что мое веб-приложение и мой скрипт Google Apps не являются одним и тем же объектом для Google (не тот же client_id).
Я бы хотел, чтобы все это работало следующим образом :
- Пользователь проходит аутентификацию в моем веб-приложении в своей учетной записи Google
- Он нажимает на кнопку, чтобы отправить электронное письмо
- Если он никогда не давал авторизацию моему скрипту Google Apps, отображается всплывающее окно авторизации
- Он предоставляет разрешения, он не перенаправляется на страницу результатов скрипта Google Apps, но остается в моем веб-приложении
- Скрипт Google Apps отправляет электронное письмо и возвращает что-то в JSONP в мое веб-приложение.
Возможно ли это сделать?
Я подумал о нескольких решениях, но я не знаю, как заставить их работать :
- Есть ли способ установить client_id скрипта Google Apps таким же, как у моего веб-приложения?
- Или есть способ создать (и настроить) кнопку, которая автоматически генерируется, когда я пытаюсь получить доступ к скрипту Google Apps, к которому я не предоставил доступ, и отобразить эту кнопку в моем веб-приложении?
Я застрял в этом, любая помощь очень ценится!
Ответ №1:
Ни один из ваших вариантов невозможен. Вы не можете обойти этот экран авторизации каким-либо образом.
Использование того же идентификатора клиента или областей не поможет вам, максимум, что позволит авторизовать вашу учетную запись, а не учетную запись пользователя. Каждый пользователь является независимым потоком oauth со своим собственным токеном, сохраняемым apps script.
Однако
, если вам необходимо, теперь это можно сделать по-другому, потому что:
1) apps script теперь поддерживает (с февраля 2014) реализацию вашего собственного потока oauth2.
Смотрите StateTokenBuilder/ScriptApp.getOAuthToken()/ScriptApp.newStateToken()
2) Google now предлагает oauth2 gmail api (представлен несколько дней назад на Google I / O 2014)
с помощью этих двух вы можете создать свой собственный код для отправки электронных писем, используя свой собственный консольный проект и т.д.
Комментарии:
1. Хорошо, спасибо за ваш ответ. Не могу ли я настроить всплывающее окно, генерируемое скриптом Google Apps, как для моего веб-приложения? Я заметил в HTML-коде, что GAS связал client_id с моим скриптом. Однако в консоли разработчиков для моего скрипта не создан идентификатор клиента. В частности, я хотел бы изменить redirect_uri на «postmessage», чтобы всплывающее окно закрывалось после предоставления пользователем доступа, но я получаю no_registered_origin, если я это сделаю.
2. нет, в настоящее время нет способа получить доступ к этой консоли, ее скрытый
3. обновленный ответ, описывающий альтернативный способ сделать это.
4. Итак, я думал, что доступ, который я предоставил GAS с помощью client_id, который я создал вручную, вообще не учитывался, но, когда я перехожу на страницу сценария непосредственно на новой вкладке, приглашение не запрашивает у меня доступ к профилю и gmail, только для «автономного доступа». Это означает, что он почти работает, если я могу заставить пользователя предоставить этот доступ в моем веб-приложении. Однако, независимо от того, изменяю ли я
access_type
наonline
илиoffline
, результат тот же. Вы знали об этом? Это нормальное поведение?5. Круто, я не знал, что можно добраться до консольного проекта. Тем не менее, с помощью ajax это невозможно сделать, вам нужно предоставить ссылку для пользователя, чтобы щелкнуть и выполнить поток oauth в первый раз. Ajax не может этого сделать