我从Google API文档推断,并非所有广告宣传的Google服务都可用于服务帐户.
例如,在服务帐户的公告中,这是文本的一部分:
"以下Google开发人员服务目前支持服务帐户:
- Google云端存储
- Google Prediction API
- Google URL Shortener
- Google OAuth 2.0授权服务器
- Google API控制台
- 适用于Python,Java和PHP的Google API客户端库
我理解前三个是指特定服务,OAuth服务器和控制台是支持任何服务之前的基础结构要求,(列表中的最后一项对我来说有点模糊.)
我还注意到这个对Google Drives的引用可用于服务帐户:http://tinyurl.com/ahwo3bs(非常酷).
是否有服务帐户授权可以访问哪些服务的完整列表?我对云存储最感兴趣(现在正在工作).Google云端硬盘,Google +环聊和环聊直播.(我知道参与环聊的服务帐户的想法可能看起来很奇怪.)
我们在使用适用于Google Apps市场用户的OAuth2服务帐户生成访问令牌时遇到问题.此处生成的令牌将用于访问Google API(联系人,日历,邮件,管理SDK API),因此我们服务中的所有Google集成都会失败.从太平洋标准时间3月9日太平洋标准时间开始突然失败.您能否将此视为重中之重,请告知我们问题的原因,或者我们是否遗漏了这些问题.我们正在获得API响应
{ "error": "invalid_request" }
Run Code Online (Sandbox Code Playgroud)
请查看以下示例请求以及" https://www.googleapis.com/oauth2/v4/token "(如文档中)和" https://accounts.google.com "的2个示例请求的所有标题和参数/ o/oauth2/token "端点.两者都分别导致响应{"error":"internal_failure","error_description":"Invalid Value"}和{"error":"invalid_request"}的错误消息.
PS:如果我们使用相应的Google客户端库,则服务电子邮件地址,用于在示例请求中生成以下签名的私钥文件都有效.但我们正在使用Google的REST API.我们在Google API控制台中创建了一个示例应用程序,用于测试新的服务帐户详细信息,这会导致相同的异常.
网址:
https://www.googleapis.com/oauth2/v4/token
头:
内容类型:应用/ X WWW的窗体-urlencoded
身体:
grant_type =瓮%3Aietf%3Aparams%3Aoauth%3Agrant型%3Ajwt承载&断言= eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9vYXV0aDIvdjQvdG9rZW4iLCJzdWIi OiJqYWdzQHNvbHV0aW9udGVzdC5jb20iLCJzY29wZSI6Imh0dHBzOi8vbWFpbC5nb29nbGUuY29t LyIsImlzcyI6IjQ2OTU3MTY1OTAxNUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsImV4 cCI6MTQ1NzU5NTkwMCwiaWF0IjoxNDU3NTkyMzAwfQ ==.VrsqS0nYSUVZn_SwMi7UJEYLDqRcWLzPrF9o6av-t1IYZbRkTybEdcnwWeUfnYXl_F88gFTllmRg LSTBahM5gqpZrEAaWrRiDEVTo6rcN3hWm7MHcmZbwgdJB8B0ObV0Ivp5aTdLC5HcqsOumJvYpDCF SyGU8StSg9pDujERzOo =
响应:
代码:400 {"error":"internal_failure","error_description":"无效值"}
网址:
https://accounts.google.com/o/oauth2/token
头:
内容类型:应用/ X WWW的窗体-urlencoded
身体:
grant_type =瓮%3Aietf%3Aparams%3Aoauth%3Agrant型%3Ajwt承载&断言= eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9vYXV0aDIvdjQvdG9rZW4iLCJzdWIi OiJqYWdzQHNvbHV0aW9udGVzdC5jb20iLCJzY29wZSI6Imh0dHBzOi8vbWFpbC5nb29nbGUuY29t LyIsImlzcyI6IjQ2OTU3MTY1OTAxNUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsImV4 cCI6MTQ1NzU5NTkwMCwiaWF0IjoxNDU3NTkyMzAwfQ ==.VrsqS0nYSUVZn_SwMi7UJEYLDqRcWLzPrF9o6av-t1IYZbRkTybEdcnwWeUfnYXl_F88gFTllmRg LSTBahM5gqpZrEAaWrRiDEVTo6rcN3hWm7MHcmZbwgdJB8B0ObV0Ivp5aTdLC5HcqsOumJvYpDCF SyGU8StSg9pDujERzOo =
响应:
代码:400 {"error":"invalid_request"}
编辑:文档中的示例请求.这段代码在过去的两年里为我们工作,突然间它昨天停止了工作.
POST/oauth2/v4/token HTTP/1.1主机:www.googleapis.com内容类型:application/x-www-form-urlencoded
grant_type =瓮%3Aietf%3Aparams%3Aoauth%3Agrant型%3Ajwt承载&断言= eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI3NjEzMjY3OTgwNjktcjVtbGpsbG4xcmQ0bHJiaGc3NWVmZ2lncDM2bTc4ajVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLCJzY29wZSI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvcHJlZGljdGlvbiIsImF1ZCI6Imh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9vL29hdXRoMi90b2tlbiIsImV4cCI6MTMyODU3MzM4MSwiaWF0IjoxMzI4NTY5NzgxfQ.ixOUGehweEVX_UKXv5BbbwVEdcz6AYS-6uQV6fGorGKrHf3LIJnyREw9evE-gs2bmMaQI5_UbabvI4k-mQE4kBqtmSpTzxYBL1TCd7Kv5nTZoUC1CmwmWCFqT9RE6D7XSgPUh_jF1qskLa2w0rxMSjwruNKbysgRNctZPln7cqQ
google-api google-apps google-authentication google-apps-marketplace service-accounts
根据几个示例,gsutil config可用于从服务帐户的OAuth2凭据创建与GCS兼容的.boto文件.
例如,httpsgsutil config -e
://cloud.google.com/storage/docs/xml-api/gspythonlibrary 建议您使用服务帐户凭据来配置.boto文件; 但是,当运行该命令时,我得到:
CommandException: OAuth2 is the preferred authentication mechanism
with the Cloud SDK. Run "gcloud auth login" to configure authentication,
unless you want to authenticate with an HMAC access key and secret,
in which case run "gsutil config -a".
Run Code Online (Sandbox Code Playgroud)
按照说明,我尝试使用gcloud auth activate-service-account:
$ gcloud auth activate-service-account --key-file=/Users/crschmidt/mirandum-local/cloud-storage-service.json
Activated service account credentials for: [gcs-storage@livestream-alerts.iam.gserviceaccount.com]
Run Code Online (Sandbox Code Playgroud)
但这不会创建.boto文件.
我可以在互操作性模式下配置可互操作的HMAC项目ID /秘密并使用它,但由于首选OAuth2凭据,并且服务帐户凭证似乎是正确的方法,我不知道如何继续.如何为服务帐户编写.boto文件?
crschmidt-macbookair:~ crschmidt$ gsutil --version
gsutil version: 4.19
Run Code Online (Sandbox Code Playgroud) boto google-cloud-storage service-accounts google-cloud-platform
我尝试使用一个激活的服务帐户作用域来创建和删除gcloud容器集群(k8s集群),使用以下命令:
gcloud config configurations create my-svc-account \
--no-activate \
--project myProject
gcloud auth activate-service-account my-svc-account@my-project.iam.gserviceaccount.com \
--key-file=/path/to/keyfile.json \
--configuration my-svc-account
gcloud container clusters create a-new-cluster \
--configuration my-svc-account \
--project= my-project
--zone "my-zone"
Run Code Online (Sandbox Code Playgroud)
我总是收到错误:
...ERROR: (gcloud.container.clusters.create) ResponseError: code=400, message=The user does not have access to service account "default".
Run Code Online (Sandbox Code Playgroud)
如何授予my-svc-account访问GKE默认服务帐户的权限?
我使用google-api-php-client客户端使用服务帐户连接到Google云端硬盘.它大部分时间都有效,但每隔一段时间(例如,如果我坐在这里每隔5到10次刷一遍页面),我会收到一条Google_Service_Exception
消息unauthorized_client: Client is unauthorized to retrieve access tokens using this method
.只有$this->drive_service->files->listFiles()
代码存在时才会出现错误.如果我直接使用服务帐户而不是setSubject()
模仿其他用户,则不会发生这种情况.
$this->client = new Google_Client();
$this->client->useApplicationDefaultCredentials();
$this->client->addScope("https://www.googleapis.com/auth/drive");
$this->client->setSubject('xxxx');
$this->drive_service = new Google_Service_Drive($this->client);
$files = $this->drive_service->files->listFiles();
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
2017年2月21日更新:错误不再是间歇性的,每次都会发生错误,因此我无法再通过服务帐户连接到常规帐户.
2017年3月10日更新:好像这是用户的误解.必须为服务帐户授予"域范围权限"才能冒充该域的用户 - 这是我尚未做过的事情.我只是授权客户端访问此处所述的用户帐户.
我已经在这个问题上花费了几个小时,但似乎我无法激活服务帐户来在本地开发 App Engine 项目(如果我部署该项目,它可以很好地进行身份验证,因为凭据是作为 env 变量注入的)。
问题
我在 GC 平台上的 IAM 下创建了一个新的服务帐户。
服务帐户已正确创建我可以通过控制台和
在服务帐户下,我生成了一个新的 JSON 密钥 -> key.json
在控制台中,我使用了 gcloud auth activate-service-account --key file=key.json
{
"type": "service_account",
<br> "project_id": "[project id]",
<br> "private_key_id": "[private_key_id]",
<br> "private_key": "[private_key]",
<br> "client_email": "[name]",
<br> "client_id": "[clien id]",
<br> "auth_uri": "https://accounts.google.com/o/oauth2/auth",
<br> "token_uri": "https://accounts.google.com/o/oauth2/token",
<br> "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
<br> "client_x509_cert_url":
"https://www.googleapis.com/robot/v1/metadata/x509/[client_email]"
<br> }
Run Code Online (Sandbox Code Playgroud)
我收到错误消息ERROR: (gcloud.auth.activate-service-account) Failed to activate the given service account。请确保提供的密钥文件有效。
在尝试了我所能做的一切之后,我发现在文档中,服务帐户密钥确实具有不同的结构。https://cloud.google.com/iam/reference/rest/v1/projects.serviceAccounts.keys 但 我不知道为什么下载的密钥结构不好。
有人遇到过这个问题吗?任何解决方案?
我正在尝试在 Google Cloud Platform 中创建一个仅具有 Google Drive API 访问权限的服务帐户。但是,我根本找不到角色:
此外,如果我创建一个“通用服务帐户”,那么该用户可以添加实例等。这在过去一直是一个可怕的安全问题,因为拥有该密钥的用户实际上已经创建了未经授权的实例(因此出现了上述问题)。
我将如何创建一个可以访问 Google Drive API 而没有其他权限的服务帐户?
我按照本教程:https://medium.com/@infinitesimal_/doing-android-purchase-validation-api-v3-in-java-5c46fc837368
但我不能让它发挥作用!我能得到的就是:
{
"code" : 401,
"errors" : [ {
"domain" : "androidpublisher",
"message" : "The current user has insufficient permissions to perform the requested operation.",
"reason" : "permissionDenied"
} ],
"message" : "The current user has insufficient permissions to perform the requested operation."
}
Run Code Online (Sandbox Code Playgroud)
这是我的java代码:
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
JacksonFactory jsonFactory = JacksonFactory.getDefaultInstance();
String applicationName = "My App";
String packageName = "com.my.package";
final Set<String> scopes = Collections.singleton(AndroidPublisherScopes.ANDROIDPUBLISHER);
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId("myAccoutId")
.setServiceAccountScopes(scopes) …
Run Code Online (Sandbox Code Playgroud) android in-app-purchase service-accounts google-play-developer-api google-play-console
我想定期运行一个应用程序(在 AWS Lambda 上),它使用 Youtube 的报告 API获取报告并将报告存储在数据库中。我是 Youtube 频道的所有者。
但是,我在设置授权时遇到了问题。文档提到了OAuth的许多流程。其中,服务帐户流程似乎很适合这里,因为我没有尝试访问任何其他用户的数据,而且我的应用程序没有 UI。但是,他们提到“YouTube Reporting API 和 YouTube Analytics API 不支持此流程”。对于其他流程,即服务器端和客户端,看起来我需要一个 UI 应用程序。
我在本地运行了他们的Java 代码示例,它打开了浏览器进行授权。
我想知道是否可以在没有 UI/浏览器支持的情况下完成授权。这似乎是一个应该支持的常见用例。
这个相关的堆栈溢出答案提到“相反,创建和使用网络客户端谷歌凭据。存储和使用从流程中生成的令牌。”。如果我理解正确,我需要从谷歌开发控制台生成客户端 ID 和客户端密码,然后可能使用oauth 游乐场生成访问令牌。但是,此令牌将在 24 小时内过期。我可以不断刷新令牌,但这似乎是一种解决方法。
如果不支持,我正在考虑的另一种方法是我的应用程序发送一封带有身份验证链接的电子邮件,并在电子邮件收件人打开链接并登录后继续运行。我想知道获取该链接是否可行谷歌的 oauth 库。
注意:我没有使用 Google 的 App Engine 或 Compute Engine。
java google-api-java-client google-oauth service-accounts youtube-analytics-api
大家好。
我被分配了使用 Spring Boot 从 Google 域的每个成员的收件箱中获取未答复电子邮件的任务,但我无法做到。
首先,我需要域中的用户列表。这可以通过 Directory API 实现(顺便说一下,它不能在 Google Developer Console 中通过该名称启用。看起来它属于 Admin SDK 左右)。
到目前为止我所面临的是:
我没有将凭据存储在 JSON 文件中,而是将它们存储在环境变量中。我正在这样做:
var inputStream = IOUtils.toInputStream(apiCredentials, Charset.defaultCharset()); //apiCredentials is a string with the JSON contents.
var credential = GoogleCredential
.fromStream(inputStream, httpTransport, JacksonFactory.getDefaultInstance())
.createScoped(Collections.singleton(DirectoryScopes.ADMIN_DIRECTORY_USER));
var directoryService = new Directory.Builder(httpTransport, JacksonFactory.getDefaultInstance(), credential)
.setApplicationName("My App")
.build();
var result = directoryService.users().list()
.setPageToken(pageToken)
.setDomain("my.domain")
.setMaxResults(10)
.execute();
Run Code Online (Sandbox Code Playgroud)
在此之后,我收到一个400 Bad request …
google-api google-api-java-client service-accounts spring-boot
service-accounts ×10
google-api ×4
android ×1
boto ×1
gcloud ×1
google-apps ×1
google-oauth ×1
google-plus ×1
java ×1
json ×1
spring-boot ×1