Аутентификация

Поддерживаются пять методов аутентификации:

  • OAuth 2.0;
  • по имени пользователя и паролю;
  • по имени пользователя и токену;
  • с помощью ключа;
  • без аутентификации.

В зависимости от используемого вами метода в коннектор нужно включить дополнительные функции.

В таблице ниже перечислены функции для каждого метода аутентификации коннектора.

OAUTH2 USER_PASS/USER_TOKEN/KEY БЕЗ АУТЕНТИФИКАЦИИ
getAuthType() Обязательно Обязательно Обязательно
resetAuth() Обязательно Обязательно
isAuthValid() Обязательно Обязательно
authCallback() Обязательно
get3PAuthorizationUrls() Обязательно
setCredentials() Обязательно

getAuthType()

Эта функция возвращает тип аутентификации для коннектора.

OAUTH2

data-studio/auth.gs
/**
     * Returns the Auth Type of this connector.
     * @return {object} The Auth type.
     */
    function getAuthType() {
      var cc = DataStudioApp.createCommunityConnector();
      return cc.newAuthTypeResponse()
        .setAuthType(cc.AuthType.OAUTH2)
        .build();
    }

USER_PASS

data-studio/auth.gs
/**
     * Returns the Auth Type of this connector.
     * @return {object} The Auth type.
     */
    function getAuthType() {
      var cc = DataStudioApp.createCommunityConnector();
      return cc.newAuthTypeResponse()
        .setAuthType(cc.AuthType.USER_PASS)
        .setHelpUrl('https://www.example.org/connector-auth-help')
        .build();
    }

USER_TOKEN

data-studio/auth.gs
/**
     * Returns the Auth Type of this connector.
     * @return {object} The Auth type.
     */
    function getAuthType() {
      var cc = DataStudioApp.createCommunityConnector();
      return cc.newAuthTypeResponse()
        .setAuthType(cc.AuthType.USER_TOKEN)
        .setHelpUrl('https://www.example.org/connector-auth-help')
        .build();
    }

KEY

data-studio/auth.gs
/**
     * Returns the Auth Type of this connector.
     * @return {object} The Auth type.
     */
    function getAuthType() {
      var cc = DataStudioApp.createCommunityConnector();
      return cc.newAuthTypeResponse()
        .setAuthType(cc.AuthType.KEY)
        .setHelpUrl('https://www.example.org/connector-auth-help')
        .build();
    }

НЕТ

data-studio/auth.gs
/**
     * Returns the Auth Type of this connector.
     * @return {object} The Auth type.
     */
    function getAuthType() {
      var cc = DataStudioApp.createCommunityConnector();
      return cc.newAuthTypeResponse()
        .setAuthType(cc.AuthType.NONE)
        .build();
    }

resetAuth()

Эта функция удаляет все учетные записи пользователя для сторонней службы.

OAUTH2

data-studio/auth.gs
/**
     * Resets the auth service.
     */
    function resetAuth() {
      getOAuthService().reset();
    }

USER_PASS

data-studio/auth.gs
/**
     * Resets the auth service.
     */
    function resetAuth() {
      var userProperties = PropertiesService.getUserProperties();
      userProperties.deleteProperty('dscc.username');
      userProperties.deleteProperty('dscc.password');
    }

USER_TOKEN

data-studio/auth.gs
/**
     * Resets the auth service.
     */
    function resetAuth() {
      var user_tokenProperties = PropertiesService.getUserProperties();
      user_tokenProperties.deleteProperty('dscc.username');
      user_tokenProperties.deleteProperty('dscc.password');
    }

KEY

data-studio/auth.gs
/**
     * Resets the auth service.
     */
    function resetAuth() {
      var userProperties = PropertiesService.getUserProperties();
      userProperties.deleteProperty('dscc.key');
    }

isAuthValid()

Эта функция вызывается, чтобы определить, выполнена ли аутентификация сторонним сервисом. Если аутентификация выполнена, вызов функций getData() и getSchema() не приведет к ошибке несанкционированного доступа. В противном случае пользователь может получить уведомление с предложением пройти авторизацию.

OAUTH2

data-studio/auth.gs
/**
     * Returns true if the auth service has access.
     * @return {boolean} True if the auth service has access.
     */
    function isAuthValid() {
      return getOAuthService().hasAccess();
    }

USER_PASS

data-studio/auth.gs
/**
     * Returns true if the auth service has access.
     * @return {boolean} True if the auth service has access.
     */
    function isAuthValid() {
      var userProperties = PropertiesService.getUserProperties();
      var userName = userProperties.getProperty('dscc.username');
      var password = userProperties.getProperty('dscc.password');
      // This assumes you have a validateCredentials function that
      // can validate if the userName and password are correct.
      return validateCredentials(userName, password);
    }

USER_TOKEN

data-studio/auth.gs
/**
     * Returns true if the auth service has access.
     * @return {boolean} True if the auth service has access.
     */
    function isAuthValid() {
      var userProperties = PropertiesService.getUserProperties();
      var userName = userProperties.getProperty('dscc.username');
      var token = userProperties.getProperty('dscc.token');
      // This assumes you have a validateCredentials function that
      // can validate if the userName and token are correct.
      return validateCredentials(userName, token);
    }

KEY

data-studio/auth.gs
/**
     * Returns true if the auth service has access.
     * @return {boolean} True if the auth service has access.
     */
    function isAuthValid() {
      var userProperties = PropertiesService.getUserProperties();
      var key = userProperties.getProperty('dscc.key');
      // This assumes you have a validateKey function that can validate
      // if the key is valid.
      return validateKey(key);
    }

OAUTH2

Добавьте и настройте OAuth2 для библиотеки Apps Script

Выполните инструкции по настройке библиотеки OAuth2 для скрипта приложений Google Apps, чтобы добавить ее в свой проект коннектора. Затем выполните действия, описанные в первом пункте руководства по использованию, чтобы создать в проекте службу OAuth2. Служба OAuth2 может иметь любое действительное название функции, однако при обращении к ней в коде необходимо использовать одно и то же название.

Пример службы OAuth2 с названием exampleService:

data-studio/auth.gs
/**
     * Returns the configured OAuth Service.
     * @return {Service} The OAuth Service
     */
    function getOAuthService() {
      return OAuth2.createService('exampleService')
        .setAuthorizationBaseUrl('...')
        .setTokenUrl('...')
        .setClientId('...')
        .setClientSecret('...')
        .setPropertyStore(PropertiesService.getUserProperties())
        .setCallbackFunction('authCallback')
        .setScope('...');
    };

authCallback()

Эта функция вызывается для завершения процесса OAuth 2.0. Она обрабатывает обратный вызов от сторонней службы аутентификации, который передается в качестве аргумента.

Пример обработки обратного вызова OAuth 2.0 с использованием библиотеки OAuth2 для скрипта приложений Google Apps:

data-studio/auth.gs
/**
     * The OAuth callback.
     * @param {object} request The request data received from the OAuth flow.
     * @return {HtmlOutput} The HTML output to show to the user.
     */
    function authCallback(request) {
      var authorized = getOAuthService().handleCallback(request);
      if (authorized) {
        return HtmlService.createHtmlOutput('Success! You can close this tab.');
      } else {
        return HtmlService.createHtmlOutput('Denied. You can close this tab');
      };
    };

get3PAuthorizationUrls()

Функция вызывается, чтобы получить URL, требующийся для запуска процесса аутентификации сторонней службы. Если функция isAuthValid возвращает значение false, то пользователь будет видеть возвращенный URL в виде кнопки или ссылки, с помощью которой можно предоставить доступ сторонней службе. См. справку по get3PAuthorizationUrls().

Пример возврата URL авторизации с помощью библиотеки OAuth2 для скрипта приложений Google Apps:

data-studio/auth.gs
/**
     * Gets the 3P authorization URL.
     * @return {string} The authorization URL.
     * @see https://developers.google.com/apps-script/reference/script/authorization-info
     */
    function get3PAuthorizationUrls() {
      return getOAuthService().getAuthorizationUrl();
    }

USER_PASS, USER_TOKEN и KEY

Информация ниже относится только к процедурам аутентификации USER_PASS, USER_TOKEN и KEY.

setCredentials()

Функция setCredentials вызывается после того, как пользователь вводит учетные данные на странице конфигурации коннектора независимых разработчиков. Используйте службы Properties, чтобы сохранять учетные данные отдельно для каждого пользователя с помощью объекта UserProperties.

USER_PASS

data-studio/auth.gs
/**
     * Sets the credentials.
     * @param {Request} request The set credentials request.
     * @return {object} An object with an errorCode.
     */
    function setCredentials(request) {
      var creds = request.userPass;
      var username = creds.username;
      var password = creds.password;

      // Optional
      // Check if the provided username and password are valid through a
      // call to your service. You would have to have a `checkForValidCreds`
      // function defined for this to work.
      var validCreds = checkForValidCreds(username, password);
      if (!validCreds) {
        return {
          errorCode: 'INVALID_CREDENTIALS'
        };
      }
      var userProperties = PropertiesService.getUserProperties();
      userProperties.setProperty('dscc.username', username);
      userProperties.setProperty('dscc.password', password);
      return {
        errorCode: 'NONE'
      };
    }

USER_TOKEN

data-studio/auth.gs
/**
     * Sets the credentials.
     * @param {Request} request The set credentials request.
     * @return {object} An object with an errorCode.
     */
    function setCredentials(request) {
      var creds = request.userToken;
      var username = creds.username;
      var token = creds.token;

      // Optional
      // Check if the provided username and token are valid through a
      // call to your service. You would have to have a `checkForValidCreds`
      // function defined for this to work.
      var validCreds = checkForValidCreds(username, token);
      if (!validCreds) {
        return {
          errorCode: 'INVALID_CREDENTIALS'
        };
      }
      var userProperties = PropertiesService.getUserProperties();
      userProperties.setProperty('dscc.username', username);
      userProperties.setProperty('dscc.token', token);
      return {
        errorCode: 'NONE'
      };
    }

KEY

data-studio/auth.gs
/**
     * Sets the credentials.
     * @param {Request} request The set credentials request.
     * @return {object} An object with an errorCode.
     */
    function setCredentials(request) {
      var key = request.key;

      // Optional
      // Check if the provided key is valid through a call to your service.
      // You would have to have a `checkForValidKey` function defined for
      // this to work.
      var validKey = checkForValidKey(key);
      if (!validKey) {
        return {
          errorCode: 'INVALID_CREDENTIALS'
        };
      }
      var userProperties = PropertiesService.getUserProperties();
      userProperties.setProperty('dscc.key', key);
      return {
        errorCode: 'NONE'
      };
    }