Los conectores de la comunidad admiten los siguientes métodos de autenticación:
- OAuth 2.0
- Ruta de acceso, nombre de usuario y contraseña
- Ruta de acceso o clave
- Nombre de usuario y contraseña
- Nombre de usuario o token
- Clave
- Ninguno
Según el método que uses, debes proporcionar funciones adicionales en tu conector.
En la siguiente tabla, se indican las funciones que debes definir según el tipo de autenticación de tu conector.
OAUTH2 | PATH_USER_PASS PATH_KEY USER_PASS USER_TOKEN KEY |
NINGUNO | |
---|---|---|---|
getAuthType() |
obligatorio | obligatorio | obligatorio |
resetAuth() |
obligatorio | obligatorio | |
isAuthValid() |
obligatorio | obligatorio | |
authCallback() |
obligatorio | ||
get3PAuthorizationUrls() |
obligatorio | ||
setCredentials() |
obligatorio |
getAuthType()
Esta función debe devolver el tipo de autenticación del conector.
OAUTH2
PATH_USER_PASS
/**
* Returns the Auth Type of this connector.
* @return {object} The Auth type.
*/
function getAuthType() {
var cc = DataStudioApp.createCommunityConnector();
return cc.newAuthTypeResponse()
.setAuthType(cc.AuthType.PATH_USER_PASS)
.setHelpUrl('https://www.example.org/connector-auth-help')
.build();
}
PATH_KEY
/**
* Returns the Auth Type of this connector.
* @return {object} The Auth type.
*/
function getAuthType() {
var cc = DataStudioApp.createCommunityConnector();
return cc.newAuthTypeResponse()
.setAuthType(cc.AuthType.PATH_KEY)
.setHelpUrl('https://www.example.org/connector-auth-help')
.build();
}
USER_PASS
USER_TOKEN
CLAVE
NINGUNO
resetAuth()
Esta función borrará las credenciales almacenadas para el usuario en el servicio de terceros.
OAUTH2
PATH_USER_PASS
/**
* Resets the auth service.
*/
function resetAuth() {
var userProperties = PropertiesService.getUserProperties();
userProperties.deleteProperty('dscc.path');
userProperties.deleteProperty('dscc.username');
userProperties.deleteProperty('dscc.password');
}
PATH_KEY
/**
* Resets the auth service.
*/
function resetAuth() {
var userProperties = PropertiesService.getUserProperties();
userProperties.deleteProperty('dscc.path');
userProperties.deleteProperty('dscc.key');
}
USER_PASS
USER_TOKEN
CLAVE
isAuthValid()
Se llama a esta función para determinar si la autenticación del servicio de terceros es válida. Si la autenticación es válida, se espera que las llamadas a getData()
y getSchema()
no fallen debido a un acceso no autorizado. Si la autorización no es válida, es posible que el usuario reciba una notificación para iniciar el flujo de autorización.
OAUTH2
PATH_USER_PASS
/**
* Returns true if the auth service has access.
* @return {boolean} True if the auth service has access.
*/
function isAuthValid() {
var userProperties = PropertiesService.getUserProperties();
var path = userProperties.getProperty('dscc.path');
var userName = userProperties.getProperty('dscc.username');
var password = userProperties.getProperty('dscc.password');
// This assumes you have a validateCredentials function that
// can validate if the path, userName and password are correct.
return validateCredentials(path, userName, password);
}
PATH_KEY
/**
* Returns true if the auth service has access.
* @return {boolean} True if the auth service has access.
*/
function isAuthValid() {
var userProperties = PropertiesService.getUserProperties();
var path = userProperties.getProperty('dscc.path');
var key = userProperties.getProperty('dscc.key');
// This assumes you have a validateCredentials function that
// can validate if the path and key are correct.
return validateCredentials(path, key);
}
USER_PASS
USER_TOKEN
CLAVE
OAUTH2
Agrega y configura OAuth2 para la biblioteca de Apps Script
Sigue las instrucciones de configuración de la biblioteca de OAuth2 para Apps Script para agregarla a tu proyecto de conector. Luego, sigue el primer paso de la guía de uso para crear un servicio de OAuth2 en tu proyecto de conector. Tu servicio de OAuth2 puede tener cualquier nombre de función válido, pero asegúrate de usar el mismo nombre cuando te refieras al servicio de OAuth2 en tu código.
Por ejemplo, un servicio OAuth2 llamado exampleService
:
authCallback()
Se llama a esta función para completar el flujo de OAuth 2.0. La respuesta de devolución de llamada del servicio de autorización externo se proporciona como un argumento y esta función debe controlarla.
Ejemplo de cómo controlar la devolución de llamada de OAuth 2.0 con la biblioteca de OAuth2 para Apps Script:
get3PAuthorizationUrls()
Se llama a esta función para obtener la URL necesaria para iniciar el flujo de autorización del servicio de terceros. Si isAuthValid
devuelve false
, la URL devuelta se mostrará al usuario como un botón o un vínculo para que pueda autorizar el acceso al servicio de terceros. Consulta la referencia de get3PAuthorizationUrls().
Ejemplo de cómo devolver la URL de autorización con la biblioteca de OAuth2 para Apps Script:
USER_PASS
, USER_TOKEN
, KEY
, PATH_USER_PASS
y PATH_KEY
Lo siguiente solo es necesario para los flujos de autenticación USER_PASS
, USER_TOKEN
, KEY
, PATH_USER_PASS
y PATH_KEY
.
setCredentials()
Se llama a setCredentials
después de que el usuario ingresa la información de sus credenciales en la página de configuración del conector de comunidad. Debes usar el servicio de propiedades para guardar las credenciales por usuario con UserProperties
.
PATH_USER_PASS
/**
* Sets the credentials.
* @param {Request} request The set credentials request.
* @return {object} An object with an errorCode.
*/
function setCredentials(request) {
var creds = request.pathUserPass;
var path = creds.path;
var username = creds.username;
var password = creds.password;
// Optional
// Check if the provided path, 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(path, username, password);
if (!validCreds) {
return {
errorCode: 'INVALID_CREDENTIALS'
};
}
var userProperties = PropertiesService.getUserProperties();
userProperties.setProperty('dscc.path', path);
userProperties.setProperty('dscc.username', username);
userProperties.setProperty('dscc.password', password);
return {
errorCode: 'NONE'
};
}
PATH_KEY
/**
* Sets the credentials.
* @param {Request} request The set credentials request.
* @return {object} An object with an errorCode.
*/
function setCredentials(request) {
var creds = request.pathKey;
var path = creds.path;
var key = creds.key;
// Optional
// Check if the provided path and key are valid through
// a call to your service. You would have to have a `checkForValidCreds`
// function defined for this to work.
var validCreds = checkForValidCreds(path, key);
if (!validCreds) {
return {
errorCode: 'INVALID_CREDENTIALS'
};
}
var userProperties = PropertiesService.getUserProperties();
userProperties.setProperty('dscc.path', path);
userProperties.setProperty('dscc.key', key);
return {
errorCode: 'NONE'
};
}