Поддерживает ли Google AppScript (GAS) O-Auth 2.0 неявный тип предоставления - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь создать новую надстройку Gmail с помощью Google Apps Script и пытаюсь получить доступ к стороннему API, не являющемуся Google.Для этого я использую O-Auth 2.0 Implicit Grant-Type для аутентификации.

Вот как выглядит AuthService:

function getOAuthService() {
  return OAuth2.createService('Podio O-Auth')
    .setAuthorizationBaseUrl('Base Url')
    .setTokenUrl('Token Url')
    .setClientId('clientId')
    .setClientSecret('clientSecret')
    .setParam('redirect_uri', 'https://script.google.com/macros/d/' + scriptID + '/usercallback')
    .setScope('GLOBAL')
    .setCallbackFunction('authCallback')
    .setCache(CacheService.getUserCache())
    .setParam('response_type', 'token')
    .setParam('response_mode', 'query')
    .setParam('state', getStateToken('authCallback')) // function to generate the state token on the fly
    .setPropertyStore(PropertiesService.getUserProperties());
}

Скрипт правильно генерирует URL, который включает в себя мойredirect_uri
Auth получает запрос, генерирует токен и перенаправляет меня в домен scripts.google.com.

При нажатии scripts.google.com я перенаправляюсь на URL, который включает в себя мой пользовательскийдомен, например

https://script.google.com/a/macros/[custom-domain]/d/[script-id]/usercallback#access_token=[token]&expires_in=7200&token_type=Bearer&state=[state]&id_token=[token]

, что приводит к этой ошибке:

потому что URL фрагментирован #.Если я заменим # на ?, то он будет работать, как и ожидалось.

Может кто-нибудь сказать мне, как я могу решить эту проблему?Если нет, то нужно ли для этой цели использовать поток разрешения кода авторизации?

Примечание. Я использовал setParam('response_type', 'token') для неявного типа предоставления

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Библиотека в настоящее время не поддерживает неявные гранты.Google AppScript поддерживает поток на стороне сервера.Итак, я установил response_type = code, и эта рабочая служба авторизации выглядит следующим образом:

function getOAuthService() {
  return OAuth2.createService('Podio O-Auth')
    .setAuthorizationBaseUrl('Base Url')
    .setTokenUrl('Token Url')
    .setClientId('clientId')
    .setClientSecret('clientSecret')
    .setParam('redirect_uri', 'https://script.google.com/macros/d/' + scriptID + '/usercallback')
    .setScope('GLOBAL')
    .setCallbackFunction('authCallback')
    .setCache(CacheService.getUserCache())
    .setParam('response_type', 'code')
    .setParam('response_mode', 'query')
    .setParam('state', getStateToken('authCallback')) // function to generate the state token on the fly
    .setPropertyStore(PropertiesService.getUserProperties());
}

Она сначала внутренне вызывает autorizatiionBaseUrl и получает код авторизации.И с этим кодом авторизации он снова отправляет запрос TokenUrl, чтобы получить auth_token, refresh_token и другие детали.Благодарю.:)

0 голосов
/ 06 октября 2018

По вашему вопросу в apps-script-oauth2 GitHub repo ваша конкретная реализация OAuth в скрипте приложений (с использованием этой библиотеки) не поддерживает неявное предоставление.Учитывая, что Apps Script выполняется на сервере (а не на клиенте, где неявное предоставление является наиболее полезным), маловероятно, что используемая вами библиотека будет расширена для его поддержки.

...