请求失败 https://cloudidentity.googleapis.com 返回代码 403
Request failed for https://cloudidentity.googleapis.com returned code 403
我正在尝试使用 this API 在我的工作中管理公司设备space。第一步是拉出当前设备的列表。代码在应用程序脚本中。
我得到:
Exception: Request failed for https://cloudidentity.googleapis.com returned code 403. Truncated server response: {
"error": {
"code": 403,
"message": "The caller does not have permission",
"status": "PERMISSION_DENIED"
}
}
我做过的事情
- 服务帐户对云平台、云身份和云-identity.devices
具有域范围的委托
- Auth 是通过 Google 的 OAuth 库完成的,似乎工作正常。
- OAuth 也有 space 范围,请求相同的范围。
代码位:
var scriptProperties = PropertiesService.getScriptProperties()
private_key= scriptProperties.getProperty('private_key').replace(/\n/g, '\n')
client_email = scriptProperties.getProperty("client_email")
;
function getOAuthService() {
return OAuth2.createService('Service Account')
// Set the endpoint URLs
.setTokenUrl('https://accounts.google.com/o/oauth2/token')
// Set the client ID and secret
.setPrivateKey(private_key)
.setIssuer(client_email)
// Set the property store where authorized tokens should be persisted
.setPropertyStore(PropertiesService.getScriptProperties())
// .setCache(CacheService.getUserCache())
.setParam('access_type', 'offline')
.setScope('https://www.googleapis.com/auth/cloud-identity');
}
function reset() {
var service = getOAuthService();
service.reset();
}
function downloadDevices() {
var service = getOAuthService();
service.reset();
if (service.hasAccess()) {
var pageToken;
var URL = "https://cloudidentity.googleapis.com/v1/devices";
var headers = {
Authorization: 'Bearer ' + service.getAccessToken()
};
var options = {
method : "GET",
headers: headers
};
var response = UrlFetchApp.fetch(URL, options);
} else {
Logger.log('service Error');
Logger.log(service.getLastError());
}
}
看起来一切正常,只是我没有权限。
但据我所知,没有更多的相关权限可以授予。
根据提供的代码,我可以看出您可能没有进行获得正确权限所需的用户模拟。通常当用户模拟没有正确完成时,系统可以从服务帐户获取权限,因为这个没有超级管理员权限,这就是你得到 403 错误的原因。
正确的做法是使用服务帐户模拟超级管理员,以便在调用 API.
时获得足够的权限
我正在尝试使用 this API 在我的工作中管理公司设备space。第一步是拉出当前设备的列表。代码在应用程序脚本中。
我得到:
Exception: Request failed for https://cloudidentity.googleapis.com returned code 403. Truncated server response: {
"error": {
"code": 403,
"message": "The caller does not have permission",
"status": "PERMISSION_DENIED"
}
}
我做过的事情
- 服务帐户对云平台、云身份和云-identity.devices 具有域范围的委托
- Auth 是通过 Google 的 OAuth 库完成的,似乎工作正常。
- OAuth 也有 space 范围,请求相同的范围。
代码位:
var scriptProperties = PropertiesService.getScriptProperties()
private_key= scriptProperties.getProperty('private_key').replace(/\n/g, '\n')
client_email = scriptProperties.getProperty("client_email")
;
function getOAuthService() {
return OAuth2.createService('Service Account')
// Set the endpoint URLs
.setTokenUrl('https://accounts.google.com/o/oauth2/token')
// Set the client ID and secret
.setPrivateKey(private_key)
.setIssuer(client_email)
// Set the property store where authorized tokens should be persisted
.setPropertyStore(PropertiesService.getScriptProperties())
// .setCache(CacheService.getUserCache())
.setParam('access_type', 'offline')
.setScope('https://www.googleapis.com/auth/cloud-identity');
}
function reset() {
var service = getOAuthService();
service.reset();
}
function downloadDevices() {
var service = getOAuthService();
service.reset();
if (service.hasAccess()) {
var pageToken;
var URL = "https://cloudidentity.googleapis.com/v1/devices";
var headers = {
Authorization: 'Bearer ' + service.getAccessToken()
};
var options = {
method : "GET",
headers: headers
};
var response = UrlFetchApp.fetch(URL, options);
} else {
Logger.log('service Error');
Logger.log(service.getLastError());
}
}
看起来一切正常,只是我没有权限。 但据我所知,没有更多的相关权限可以授予。
根据提供的代码,我可以看出您可能没有进行获得正确权限所需的用户模拟。通常当用户模拟没有正确完成时,系统可以从服务帐户获取权限,因为这个没有超级管理员权限,这就是你得到 403 错误的原因。
正确的做法是使用服务帐户模拟超级管理员,以便在调用 API.
时获得足够的权限