我在本地计算机上的Java Development Server(AKA devserver)上运行了一个GAE应用程序,它定义了一些任务队列拉取队列。
我想从我的机器上运行的其他独立Java应用程序中使用Task Queue REST API来访问这些拉取队列。
我尝试了the sample建议实施租赁任务的documentation。显然,它使用需要client_secrets.json
格式文件的Google API Client Library for Java:
{
"installed": {
"client_id": "retrieved from creating a Service Account for the project",
"client_secret": "supposedly appears in the JSON file that's downloaded upon creation of a Service Account for the project"
}
}
我为项目创建了一个服务帐户,并自动下载了JSON,格式如下:
{
"type": "service_account",
"project_id": "myProjectId",
"private_key_id": "some long hexadecimal",
"private_key": "an even longer encrypted stuff",
"client_email": "myServiceAccountName@myProjectId.iam.gserviceaccount.com",
"client_id": "a decimal number",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/myServiceAccountName%40myProjectId.iam.gserviceaccount.com"
}
在我的client_secrets.json
文件中,我使用private_key_id
作为client_secret
值并执行了示例代码。
结果是它在我的浏览器中打开https://accounts.google.com/o/oauth2/auth
,显示状态代码为400
的错误,并显示以下消息:
错误:redirect_uri_mismatch应用程序:我的应用程序重定向 请求中的URI:http://localhost:61130/Callback与a不匹配 注册重定向URI。
我尝试了Taskqueue.Builder.setRootUrl("http://localhost:8080")
,虽然它的javadoc说不要弄乱它。它返回了401 Unauthorized
。
client_secret
文件中使用client_secrets.json
1 的值?1 当我创建服务帐户时,由于我不是项目的所有者,我收到以下消息:
无法将服务帐户添加到此项目的权限中 因为您不是该项目的所有者。提供服务 帐户访问此项目,请项目所有者将其添加到 项目权限。
我想知道这是否与自动下载的JSON中缺少client_secret
属性有关。
答案 0 :(得分:0)
我不认为开发服务器会公开任务队列API,针对您创建的单独测试项目进行测试。
您可以使用服务帐户中的JSON连接到任务队列API,请参阅service accounts文档。
GoogleCredential凭据= GoogleCredential.fromStream(新FileInputStream(“MyProject-1234.json”)) .createScoped(Collections.singleton( “https://www.googleapis.com/auth/taskqueue”));
Taskqueue taskQueue = new Taskqueue.Builder( httpTransport,JSON_FACTORY,凭证).setApplicationName(APPLICATION_NAME) .setTaskqueueRequestInitializer(new TaskqueueRequestInitializer(){ @覆盖 public void initializeTaskqueueRequest(TaskqueueRequest request){ request.setPrettyPrint(真); } })建立();
//获取队列
com.google.api.services.taskqueue.model.TaskQueue queue = getQueue(taskQueue); 的System.out.println(队列);
//租赁,执行和删除任务
任务tasks = getLeasedTasks(taskQueue);