无法通过 OAuth 2 访问令牌在 Google Blogger API v3.0 中进行身份验证
Can't authenticate in Google Blogger API v3.0 via OAuth 2 access token
正在尝试使用 Google Blogger API v3.0
设置测试博客 -
https://msi-blogger-api-test.blogspot.com/
Blogger 用户 ID 是 - 11970463155418365784
正如出现在 -
https://www.blogger.com/profile/11970463155418365784
为此项目设置“API 密钥”和“OAuth 2.0 令牌”-
在 Blogger 沙盒中它完美运行 -
从 Blogger 沙盒复制了 cURL。
通过“复制”按钮(在屏幕截图中突出显示)从 console.cloud.google.com(上面的屏幕截图)复制了“API 密钥”和“OAuth 2.0 令牌”。
通过 cURL 从 CLI 尝试,在单独使用“API 键”时有效 -
通过 cURL 从 CLI 尝试,在使用“API 密钥”和“OAuth 2.0 令牌”时不起作用 -
尝试通过以下两种方式使用“OAuth 2.0 令牌”:
- 1008747252329-g8j8...ebb.apps.googleusercontent.com
- 1008747252329-g8j8...退潮
认为可能不需要“.apps.googleusercontent.com”后缀。
这没有任何区别。
那么,我错过了什么?为什么“API 密钥”有效但“OAuth 2.0 令牌”无效?
是的,我不需要在这个(API“get”)示例中为 cURL 使用“OAuth 2.0 令牌”,但它应该仍然有效。
当我尝试不同的 API 时,说“listByUser”,这需要“OAuth 2.0 令牌”- 它不起作用,我得到同样的错误。
So, what am I missing? Why does the "API key" works but "OAuth 2.0 token" does not?
直接回答你的问题。 API 密钥仅适用于 public 数据,您没有发送有效的访问令牌作为 OAuth 2 承载令牌,您发送的值是错误的。
Api键
首先,API 密钥只会让您访问 public 数据,因此您可以使用 API 密钥来列出 YouTube 上的 public 视频,或查看 Google 日历上的 public 假日日历之一。您不能使用 API 密钥访问私人用户数据
要访问私人用户数据或任何需要授权的方法,您需要提供授权 header 并提交有效的不记名令牌。
“OAuth 2.0 令牌”
您的问题是您没有提交有效的访问令牌。看起来您可能正在尝试从 Google 云控制台上的项目发送客户端 ID。这不是访问令牌。
如何使用 curl 获取访问令牌。
如何使用 CURL 获取访问令牌是一个三步过程,第一步是请求拥有数据的用户的授权
这是一个 HTTP get 调用,可以放在任何浏览器中 window。
GET https://accounts.google.com/o/oauth2/v2/auth?client_id=XXXX.apps.googleusercontent.com&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https://www.googleapis.com/auth/userinfo.profile&response_type=code
正在尝试使用 Google Blogger API v3.0
设置测试博客 - https://msi-blogger-api-test.blogspot.com/
Blogger 用户 ID 是 - 11970463155418365784 正如出现在 - https://www.blogger.com/profile/11970463155418365784
为此项目设置“API 密钥”和“OAuth 2.0 令牌”-
在 Blogger 沙盒中它完美运行 -
从 Blogger 沙盒复制了 cURL。
通过“复制”按钮(在屏幕截图中突出显示)从 console.cloud.google.com(上面的屏幕截图)复制了“API 密钥”和“OAuth 2.0 令牌”。
通过 cURL 从 CLI 尝试,在单独使用“API 键”时有效 -
通过 cURL 从 CLI 尝试,在使用“API 密钥”和“OAuth 2.0 令牌”时不起作用 -
尝试通过以下两种方式使用“OAuth 2.0 令牌”:
- 1008747252329-g8j8...ebb.apps.googleusercontent.com
- 1008747252329-g8j8...退潮
认为可能不需要“.apps.googleusercontent.com”后缀。
这没有任何区别。
那么,我错过了什么?为什么“API 密钥”有效但“OAuth 2.0 令牌”无效?
是的,我不需要在这个(API“get”)示例中为 cURL 使用“OAuth 2.0 令牌”,但它应该仍然有效。
当我尝试不同的 API 时,说“listByUser”,这需要“OAuth 2.0 令牌”- 它不起作用,我得到同样的错误。
So, what am I missing? Why does the "API key" works but "OAuth 2.0 token" does not?
直接回答你的问题。 API 密钥仅适用于 public 数据,您没有发送有效的访问令牌作为 OAuth 2 承载令牌,您发送的值是错误的。
Api键
首先,API 密钥只会让您访问 public 数据,因此您可以使用 API 密钥来列出 YouTube 上的 public 视频,或查看 Google 日历上的 public 假日日历之一。您不能使用 API 密钥访问私人用户数据
要访问私人用户数据或任何需要授权的方法,您需要提供授权 header 并提交有效的不记名令牌。
“OAuth 2.0 令牌”
您的问题是您没有提交有效的访问令牌。看起来您可能正在尝试从 Google 云控制台上的项目发送客户端 ID。这不是访问令牌。
如何使用 curl 获取访问令牌。
如何使用 CURL 获取访问令牌是一个三步过程,第一步是请求拥有数据的用户的授权
这是一个 HTTP get 调用,可以放在任何浏览器中 window。
GET https://accounts.google.com/o/oauth2/v2/auth?client_id=XXXX.apps.googleusercontent.com&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https://www.googleapis.com/auth/userinfo.profile&response_type=code