有没有在代码库中使用多个GOOGLE_APPLICATION_CREDENTIALS的机制?

时间:2019-08-23 10:15:45

标签: dialogflow

我们在一个Google服务帐户中有多个项目,并且每个项目都有单独的GOOGLE_APPLICATION_CREDENTIALS json文件。根据基于区域设置和projectID的要求,我们必须使用相关的凭据json文件。

尝试通过环境变量加载,但只能接受一个文件路径,

设置环境变量

GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/[FILE_NAME].json"

如果请求来自该服务帐户中的任何项目,则期望验证成功。

3 个答案:

答案 0 :(得分:0)

您需要直接从json文件设置凭据,而不是在环境变量中设置凭据。

from google.oauth2 import service_account
SERVICE_ACCOUNT_FILE = "/home/user/Downloads/[FILE_NAME].json"
credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE)
project_id = "project_id"
session_id = "session_id"
session_client = dialogflow.SessionsClient(credentials=credentials)
session = session_client.session_path(project_id, session_id)

希望有帮助。

答案 1 :(得分:0)

// 1. read json by InputStream
    InputStream stream = context.getAssets().open("-----.json");
    GoogleCredentials credentials = GoogleCredentials.fromStream(stream);
    String projectId = ((ServiceAccountCredentials)credentials).getProjectId();

// 2. build SessionSettings
    SessionsSettings.Builder settingsBuilder = SessionsSettings.newBuilder();
    SessionsSettings sessionsSettings = settingsBuilder.setCredentialsProvider(FixedCredentialsProvider.create(credentials)).build();

// 3. create SessionsClient
    SessionsClient sessionsClient = SessionsClient.create(sessionsSettings)

答案 2 :(得分:0)

您可以检查“-----.json”文件。

有 private_key 和 client_email。

您可以在代码中使用它们。 这工作正常。

let config = {
    credentials: {
        private_key: private_key,
        client_email: client_email
    }
};


// Create a new session
const sessionClient = new dialogflow.SessionsClient(config);
const sessionPath = sessionClient.projectAgentSessionPath(
  projectId,
  sessionId
);

这会很有帮助。