Google OAuth2 .Net HttpPost 请求 access_token 中缺少 refresh_token

Posted

技术标签:

【中文标题】Google OAuth2 .Net HttpPost 请求 access_token 中缺少 refresh_token【英文标题】:refresh_token is missing in Google OAuth2 .Net HttpPost request for access_token 【发布时间】:2021-12-13 06:46:14 【问题描述】:

在我使用 .Net HttpPost 的 Google OAuth 请求中缺少 refresh_token 值。

参考:https://developers.google.com/identity/protocols/oauth2/web-server#exchange-authorization-code

我的输入 HTTP 发布请求 -

...google oauth post request details..url - (https://accounts.google.com/o/oauth2/token)...
and the postData - (client_id=<client_id>&client_secret=<client_secret_key>&grant_type=authorization_code&redirect_uri=<redirect_url>&code=<authorization_code>&access_type=offline&prompt=consent&approval_prompt=force)

注意:我有一个关于 access_token 的有效响应。但是,refresh_token 对象值带有空记录。

请帮忙。

我已经查看了这些链接 - Not receiving Google OAuth refresh token

【问题讨论】:

【参考方案1】:

将授权代码交换为访问令牌和刷新令牌的调用如下所示。

HTTP POST https://accounts.google.com/o/oauth2/token
code=4/X9lG6uWd8-MMJPElWggHZRzyFKtp.QubAT_P-GEwePvB8fYmgkJzntDnaiAI&client_id=ClientId&client_secret=ClientSecret&redirect_uri=redirectURI&grant_type=authorization_code

您不使用access_type , approval_prompt, prompt 作为授权代码交换的一部分,这些授权代码包含在显示同意屏幕的 HTTP GET 请求中。

如果您在 Google 开发者控制台上创建了 Web 凭据客户端,则可以在此处添加 access_type。

HTTP GET https://accounts.google.com/o/oauth2/auth?client_id=clientid&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https://www.googleapis.com/auth/analytics.readonly&response_type=code&access_type=offline

如果您有兴趣了解调用是如何建立的,这可能会有所帮助。 Understanding Google OAuth 2.0 with curl

【讨论】:

以下响应对象仅为请求创建 - refresh_token 对象本身丢失! ( "access_token": values, "expires_in": 3599, "scope": url, "token_type": "Bearer", "id_token": "values" ) id_token 是不是 refresh_token? id 令牌是开放的 id connect 而不是 oauth2 看起来只有我用于授权 OAuth 的帐户存在问题。请注意,我的帐户仅用于 Google Play 控制台和 API 访问 Google Play android Developer API。我是否缺少任何权限? 您的客户端 ID 和客户端密码是在这里创建的,对 console.cloud.google.com/apis/dashboard 您创建了哪种类型的客户端? 是的。 OAuth 2.0 并且仅通过 Google Play Android 开发者 API 服务启用。

以上是关于Google OAuth2 .Net HttpPost 请求 access_token 中缺少 refresh_token的主要内容,如果未能解决你的问题,请参考以下文章

Google OAuth2 .Net HttpPost 请求 access_token 中缺少 refresh_token

Freebase oAuth2 错误请求(400).Net

如何使用 google.oauth2 python 库?

Vaadin 21 Flow + Spring Security OAuth2:找不到'oauth2/authorization/google'的路由

如何将 Google Services oAuth2 转换为 Google Ads API oAuth2 访问权限

如何获取经过 Google 身份验证的用户(oauth2)的 Google 聊天(环聊)ID?