使用OAuth2服务帐户

时间:2016-03-10 13:03:21

标签: google-api google-apps google-apps-marketplace google-authentication service-accounts

我们在使用OAuth2 Service Account为Google Apps市场用户生成访问令牌时遇到问题。此处生成的令牌将用于访问Google API(联系人,日历,邮件,管理SDK API),因此我们服务中的所有Google集成都会失败。从太平洋标准时间3月9日太平洋标准时间开始突然失败。您能否将此视为重中之重,请告知我们问题的原因,或者我们是否遗漏了这些内容。我们正在获取API响应

{ "error": "invalid_request" }

请查看以下示例请求,其中包含针对" https://www.googleapis.com/oauth2/v4/token"(如文档中)和" https://accounts.google.com/o/oauth2/token&#的2个样本请求的所有标题和参数34;端点。两者都会产生错误消息,其中包含回复{"错误":" internal_failure"," error_description":"无效值"}和{&# 34;错误":" invalid_request"分别。

P.S:服务电子邮件地址,用于在示例请求中生成以下签名的私钥文件,如果我们使用相应的Google客户端库,则可以使用。但我们正在使用Google的REST API。我们在Google API控制台中创建了一个示例应用程序,用于测试新的服务帐户详细信息,这会导致相同的异常。

  

URL:

     

https://www.googleapis.com/oauth2/v4/token

     

接头:

     

内容类型:应用/ X WWW的窗体-urlencoded

     

BODY:

     

grant_type =瓮%3Aietf%3Aparams%3Aoauth%3Agrant型%3Ajwt承载&安培;断言= eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9vYXV0aDIvdjQvdG9rZW4iLCJzdWIi   OiJqYWdzQHNvbHV0aW9udGVzdC5jb20iLCJzY29wZSI6Imh0dHBzOi8vbWFpbC5nb29nbGUuY29t   LyIsImlzcyI6IjQ2OTU3MTY1OTAxNUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsImV4   cCI6MTQ1NzU5NTkwMCwiaWF0IjoxNDU3NTkyMzAwfQ ==。VrsqS0nYSUVZn_SwMi7UJEYLDqRcWLzPrF9o6av,t1IYZbRkTybEdcnwWeUfnYXl_F88gFTllmRg   LSTBahM5gqpZrEAaWrRiDEVTo6rcN3hWm7MHcmZbwgdJB8B0ObV0Ivp5aTdLC5HcqsOumJvYpDCF   SyGU8StSg9pDujERzOo =

     

响应:

     

代码:400   {      "错误":" internal_failure",      " error_description":"无效值"   }

     

URL:

     

https://accounts.google.com/o/oauth2/token

     

接头:

     

内容类型:应用/ X WWW的窗体-urlencoded

     

BODY:

     

grant_type =瓮%3Aietf%3Aparams%3Aoauth%3Agrant型%3Ajwt承载&安培;断言= eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9vYXV0aDIvdjQvdG9rZW4iLCJzdWIi   OiJqYWdzQHNvbHV0aW9udGVzdC5jb20iLCJzY29wZSI6Imh0dHBzOi8vbWFpbC5nb29nbGUuY29t   LyIsImlzcyI6IjQ2OTU3MTY1OTAxNUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSIsImV4   cCI6MTQ1NzU5NTkwMCwiaWF0IjoxNDU3NTkyMzAwfQ ==。VrsqS0nYSUVZn_SwMi7UJEYLDqRcWLzPrF9o6av,t1IYZbRkTybEdcnwWeUfnYXl_F88gFTllmRg   LSTBahM5gqpZrEAaWrRiDEVTo6rcN3hWm7MHcmZbwgdJB8B0ObV0Ivp5aTdLC5HcqsOumJvYpDCF   SyGU8StSg9pDujERzOo =

     

响应:

     

代码:400   {      "错误":" invalid_request"   }

编辑:documentation中的示例请求。这段代码在过去的两年里为我们工作,突然间它昨天停止了工作。

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

1 个答案:

答案 0 :(得分:0)

在我的代码中更改sun.misc.BASE64Encoder编码部分以生成jwt令牌之后,它工作了。

byte[] encode = BASE64Encoder.encode(data).replaceAll("\n", "").getBytes();

(或)

更改您的BASE64Encoder编码部分,同时从sun.misc.BASE64Encoder生成jwt令牌到org.apache.commons.codec.binary.Base64

Base64 encoder = new Base64();
byte[] encode = encoder.encodeBase64(data);

如果您有任何需要澄清,请添加评论。

此解决方案由Google提供。