Соединитель Google Data Studio аутентифицируется у третьего лица - PullRequest
2 голосов
/ 30 марта 2019

Я создаю коннектор Google Data Studio для стороннего источника, Siteimprove.Siteimprove имеет API, который требует Basic Access Authentication .

Я установил аутентификацию для имени пользователя и токена (я также пробовал имя пользователя и пароль) в моемСценарий Google Apps, со всеми необходимыми функциями, основанными на документации

-edit- в соответствии с запросом полного кода для этих функций

/**
 * 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('http://developer.siteimprove.com/v1/get-access/')
    .build();
}

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

/**
 * 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);
}

/**
 * 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 = validateCredentials(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'
  };
}

function validateCredentials(userName,token){

  var headers = {
    "Authorization" : "Basic " + Utilities.base64Encode(userName + ':' + token)
  };

  var params = {
    "method":"GET",
    "headers":headers
  };

  var response = UrlFetchApp.fetch("https://api.siteimprove.com/v2/", params);
  return response;
  console.log(response);
}

и файла манифеста

{
  "dataStudio": {
    "name": "Connector for Siteimprove",
    "company": "<company name>",
    "logoUrl": "<company logo url>",
    "addonUrl": "",
    "supportUrl": "",
    "description": "This connector can be used to show basic data from Siteimprove"
  }
}

Когда я запускаю скрипт, я получаю приглашение для ввода учетных данных, но это приглашение соединиться с учетной записью Google connect with a google account

Но мне нужен способ предоставления учетных данных для сторонней службы.Если я использую свою учетную запись Google, я получаю ответ 401 от Siteimprove API, так что кажется, что он работает как положено.

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

1 Ответ

1 голос
/ 03 апреля 2019

Data Studio всегда будет запрашивать сначала авторизацию Google на основе областей действия вашего скрипта, а затем дополнительную конфигурацию на основе вашей функции getAuthType().Поскольку ваша getAuthType() функция - USER_TOKEN, после авторизации с помощью Google у вас будет дополнительное приглашение для авторизации с этими учетными данными.

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

Вы также хотите убедиться, что приминимум, вы определили getAuthType(), getData(), getSchema() и getConfig().Поскольку вы используете тип аутентификации USER_TOKEN, существуют дополнительные методы, которые вы должны определить, как описано в Аутентификация

...