社区连接器支持以下身份验证方法:
- OAuth 2.0
- 路径/用户名/密码
- 路径/键
- 用户名/密码
- 用户名/令牌
- 密钥
- 无
您还必须在连接器中提供其他函数,具体取决于您当前所用的方法。
下表显示了根据连接器的身份验证类型,您必须定义的函数。
OAUTH2 | PATH_USER_PASS PATH_KEY USER_PASS USER_TOKEN KEY |
无 | |
---|---|---|---|
getAuthType() |
必需 | 必需 | 必需 |
resetAuth() |
必需 | 必需 | |
isAuthValid() |
必需 | 必需 | |
authCallback() |
必需 | ||
get3PAuthorizationUrls() |
必需 | ||
setCredentials() |
必填 |
getAuthType()
此函数应返回连接器的身份验证类型。
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
KEY
无
resetAuth()
此函数将清除为第三方服务用户存储的所有凭据。
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
KEY
isAuthValid()
可调用此函数来确定对第三方服务进行的身份验证是否有效。如果身份验证有效,则应调用
getData()
和 getSchema()
不会因以下原因失败:
未经授权的访问。如果身份验证无效,则用户可能会收到开始授权流程的通知。
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
KEY
OAUTH2
添加和设置适用于 Apps 脚本的 OAuth2 库
按照适用于 Apps 脚本的 OAuth2 库的设置说明,将其添加到您的连接器项目。然后按照 使用指南在连接器中创建 OAuth2 服务 项目。OAuth2 服务的名称可以是任何有效的函数名称,但请确保在代码中引用 OAuth2 服务时使用相同的名称。
例如,名为 exampleService
的 OAuth2 服务:
authCallback()
可调用此函数来完成 OAuth 2.0 流程。来自第三方身份验证服务的回调响应作为参数提供,并且应由此函数处理。
使用适用于 Apps 脚本的 OAuth2 库处理 OAuth 2.0 回调的示例:
get3PAuthorizationUrls()
可调用此函数来获取针对第三方服务启动身份验证流程所需的网址。如果 isAuthValid
返回 false
,则网址
会以按钮或链接的形式向用户显示
授予第三方服务访问权限。请参阅
get3PAuthorizationUrls()。
使用适用于 Apps 脚本的 OAuth2 库返回授权网址的示例:
USER_PASS
、USER_TOKEN
、KEY
、PATH_USER_PASS
和 PATH_KEY
只有 USER_PASS
、USER_TOKEN
、KEY
、
PATH_USER_PASS
和 PATH_KEY
身份验证流程。
setCredentials()
在用户输入其凭据后调用 setCredentials
请参阅社区连接器配置页面上的您应该使用
Properties Service,用于保存每个用户的凭据
使用 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'
};
}