客户端无权发出此请求 - 在尝试通过 java 获取 google cloud sql 实例时
Posted
技术标签:
【中文标题】客户端无权发出此请求 - 在尝试通过 java 获取 google cloud sql 实例时【英文标题】:The client is not authorized to make this request -- while trying to get google cloud sql instance by java 【发布时间】:2014-07-21 10:35:24 【问题描述】:我想通过使用谷歌云服务帐户获取谷歌云 Sql 实例的详细信息。我创建了一个启用计费的服务帐户。通过使用 Java 代码中的这个服务帐户,我已经成功地完成了谷歌云存储功能,如桶创建、桶删除等。但是,当我尝试获取 GCS Sql 功能时,出现以下错误:
"code" : 403,
"errors" : [
"domain" : "global",
"message" : "The client is not authorized to make this request.",
"reason" : "notAuthorized"
],
"message" : "The client is not authorized to make this request."
下面是我的java代码sn-p:
private SQLAdmin authorizeSqlAdmin() throws Exception
if (cloudSqlAdmin == null)
HttpTransport httpTransport = new NetHttpTransport();
JsonFactory jsonFactory = new JacksonFactory();
List<String> scopes = new ArrayList<String>();
scopes.add(SQLAdminScopes.CLOUD_PLATFORM);
scopes.add(SQLAdminScopes.SQLSERVICE_ADMIN);
String propertiesFileName = "/cloudstorage.properties";
Properties cloudStorageProperties = null;
try
cloudStorageProperties = Utilities.getProperties(propertiesFileName);
catch (Exception e)
logger.error(e.getMessage(), e);
return null;
Credential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId(
cloudStorageProperties.getProperty(ACCOUNT_ID_PROPERTY)
)
.setServiceAccountPrivateKeyFromP12File(
new File(cloudStorageProperties.getProperty(PRIVATE_KEY_PATH_PROPERTY))
)
.setServiceAccountScopes(scopes).build();
cloudSqlAdmin = new SQLAdmin.Builder(httpTransport, jsonFactory, credential)
.setApplicationName(
cloudStorageProperties.getProperty(APPLICATION_NAME_PROPERTY)
)
.build();
return cloudSqlAdmin;
public DatabaseInstance getInstanceByInstanceId(String projectId, String instanceId) throws Exception
SQLAdmin cloudSql = authorizeSqlAdmin();
Get get = cloudSql.instances().get(projectId, instanceId);
DatabaseInstance dbInstance = get.execute();
return dbInstance;
我在这里缺少什么? 有人请帮帮我。
注意:我已将该服务帐户添加为权限选项卡中的成员,并将此帐户授予 CAN EDIT 权限
【问题讨论】:
【参考方案1】:通过替换 instance id 值解决了这个问题。
从 GCS 控制台我得到了实例 ID 作为 project-id:instance-name。 我将 project-id:instance-name 的整个部分作为实例 id,这就是我收到上述错误的原因
经过一些试验,我发现我需要在此处将 instance-name 作为 instanceId
get get = cloudSql.instances().get(projectId, instanceId);
这解决了我的问题。
【讨论】:
以上是关于客户端无权发出此请求 - 在尝试通过 java 获取 google cloud sql 实例时的主要内容,如果未能解决你的问题,请参考以下文章
MailChimp API 3.0:尝试创建列表时状态 403“用户无权访问请求的操作”
客户端无权作为此发件人发送(office 365,grails)