我们正在尝试为服务器到服务器应用程序实现 OAuth 2.0 最终动机是调用 Google API 来读取 GSuite 用户。
用于服务器到服务器应用程序的 OAuth 2.0 的 Google 文档是 .. - https://developers.google.com/identity/protocols/OAuth2ServiceAccount
用于读取 GSuite 用户列表的 API - https://developers.google.com/admin-sdk/directory/v1/reference/groups/list
根据文档,我们可以使用“Google API 客户端库”或“HTTP/REST”但是我们的要求是使用 HTTP/REST。
我们已成功完成以下步骤。
- 创建服务帐户。
- 将域范围的权限委派给服务帐户。
- 使用 HTTP/REST 的授权 API 调用。
在上面的第 3 步之后,我们可以通过 POSTMAN 成功获取“访问令牌”。
Postman 请求获取 access_token 成功,如下所示。
HTTP POST request :https://oauth2.googleapis.com/token
Body parameters:
grant_type:urn:ietf:params:oauth:grant-type:jwt-bearer
assertion:The JWT, including signature.
successful response :
{
"access_token": "ya29.c.EmmOB0vXrihl6nkZNr2gS1nKc4LypBlg3I1bZL2BUvPfZ53rs91fSA2TXR25TvtrZb551sdg1WwHnxg5VYWVC-SEveeypZebfwvhdGr9ECXCeuwAmfyV8TDUIN5nsqbZ7IxVyzgkew",
"expires_in": 3600,
"token_type": "Bearer"
}
但是在“调用 Google API”时出现错误/异常
使用我们得到的 access_token 调用 API 时出错。
1.Get Request via POSTMAN : Read all GSuite users
https://www.googleapis.com/admin/directory/v1/users/?customer=my_customer
Header:Bearer ya29.c.EmmOB0vXrihl6nkZNr2gS1nKc4LypBlg3I1bZL2BUvPfZ53rs91fSA2TXR25TvtrZb551s dg1WwHnxg5VYWCVC-SEveeypZebfwvhdGr9ECXCeuwAmfyV8TDUIN5nsqbZ7IxVyzgkewfZ0
error response :
{
"error": {
"errors": [
{
"domain": "global",
"reason": "backendError",
"message": "Service unavailable. Please try again"
}
],
"code": 503,
"message": "Service unavailable. Please try again"
}
}
2.通过POSTMAN获取请求:阅读GSuite Groups
https://www.googleapis.com/admin/directory/v1/groups/?
customer=my_customer
Header : Bearer ya29.c.EmmOB0v-Xrihl6nkZNr2gS1nKc4LypBlg3I1bZL2BUvPfZ53rs91fSA2TXR25TvtrZb551sdg1WwHnxg5VYWCVC-SEveeypZebfwvhdGr9ECXCeuwAmfyV8TDUIN5nsqbZ7IxVyzgkewfZ0
error response :
{
"error": {
"errors": [
{
"domain": "global",
"reason": "notFound",
"message": "Domain not found."
}
],
"code": 404,
"message": "Domain not found."
}
}