POSTMAN: 无法完成OAuth2.0登录

6
我想请求一个令牌,这样我就可以在我的Gmail帐户中登录Postman,然后调用Google Cloud API。
我正在尝试通过输入我的Gmail电子邮件地址和密码来实现,如您从这张图片中所见。

Postman Request Token

最终目标是获得像这样的API。
https://monitoring.googleapis.com/v1/projects/firetestjimis/dashboards

我可以通过使用我的Gmail账号从gcloud登录(“gcloud auth application-default login”),然后使用gcloud auth application-default print-access-token打印令牌,将打印的令牌复制并粘贴到访问令牌(Postman)中来完成它。这很有效,但是它有点强制我启动和安装gcloud。我非常确定我可以通过使用与我在gcloud中登录的相同的用户签名来实现相同的想法。我只是不知道如何在Postman中执行此操作。我读过的所有内容都导致了我粘贴在上面的图像,但是它失败并出现错误。如果相关,请参阅我获取令牌的gcloud控制台。
C:\Program Files (x86)\Google\Cloud SDK>gcloud auth application-default print-access-token
C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\bin\..\lib\third_party\google\auth\_default.py:69: UserWarning: Your application has authenticated using end user credentials from Google Cloud SDK. We recommend that most server applications use service accounts instead. If your application continues to use end user credentials from Cloud SDK, you might receive a "quota exceeded" or "API not enabled" error. For more information about service accounts, see https://cloud.google.com/docs/authentication/
  warnings.warn(_CLOUD_SDK_CREDENTIALS_WARNING)
ya29.a0Ae4lvC3-3WxUmx... removed token ... hs251yTql3eEE

C:\Program Files (x86)\Google\Cloud SDK>

第一次发布后稍作编辑

其他尝试导致的结果是

Erro 400: invalid_request
Invalid parameter value for redirect_uri: Missing scheme: /

当我尝试时

Postman

我从中复制的客户端 ID

https://console.developers.google.com/apis/credentials

在Madhead的建议下进行了编辑

我仔细地按照提供的所有步骤操作,确实可以通过在Postman上点击“获取新的访问令牌”来直接获得Google Token。然而,它会出现问题。

{
  "error": {
    "code": 403,
    "message": "Request had insufficient authentication scopes.",
    "status": "PERMISSION_DENIED"
  }
}

对于这两个来自Postman的尝试(粘贴curl脚本,因为它比Postman截图更容易被他人评估)

curl --location --request GET 'https://monitoring.googleapis.com/v1/projects/firetestjimis/dashboards' --header 'Authorization: Bearer ya29. *** token *** kO3Fg'

curl --location --request POST 'https://firestore.googleapis.com/v1/projects/firetestjimis/databases/(default)/documents:runQuery' --header 'Authorization: Bearer ya29. *** token *** kO3Fg' --header 'Content-Type: application/json' --data-raw '{
"structuredQuery": {
    "where" : {
        "fieldFilter" : { 
        "field": {"fieldPath": "id"}, 
        "op":"EQUAL", 
        "value": {"stringValue": "1"}
        }
    },
    "from": [{"collectionId": "transfer"}]
    }
}'

这是在凭据屏幕中创建的OAuth客户端ID。
{"web":{"client_id":"7953 *** 5k6e9ivtdg.apps.googleusercontent.com","project_id":"firetestjimis","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"IJGCe *** Du6bU","redirect_uris":["https://oauth.pstmn.io/v1/callback"]}}

来自下载

Google Cloud Plataform Credentials

这里是OAuth同意屏幕

***编辑过

Add Scorpe screen

scope invalid

*** 编辑

trying add https://monitoring.googleapis.com/ as scope

  • 编辑

Nothing returned from Cloud Monitoring API

***成功添加两个范围后进行编辑

它说:“因为你添加了一个敏感的范围,你的同意屏幕需要由Google进行验证才能发布。”

waiting for Google aproval

当我点击“提交验证”时,它会抱怨应用主页和应用隐私链接。

complaining about two urls

3个回答

8

实际上可以使用Postman访问OAuth 2.0保护的Google API。

首先,您需要在Google Cloud Console项目中创建一个OAuth客户端。它应该是一个“Web应用程序”客户端,重定向URI应为https://oauth.pstmn.io/v1/callback

Create OAuth client ID

记下客户端ID和客户端密钥:

Client ID & Client Secret

现在,前往Postman。创建新请求。在“授权”选项卡上,选择OAuth 2.0,然后单击“获取新访问令牌”。

New request

请填写表格。

  • 回调URL:https://oauth.pstmn.io/v1/callback(将由使用浏览器进行授权自动设置)。
  • 使用浏览器进行授权:true
  • 授权URL:https://accounts.google.com/o/oauth2/auth
  • 访问令牌URL:https://accounts.google.com/o/oauth2/token
  • 客户端ID:${你的客户端ID}
  • 客户端秘钥:${你的客户端秘钥}
  • 范围:${你的范围},例如https://www.googleapis.com/auth/gmail.readonly表示Gmail只读访问权限。请确保在您的项目中允许相应的范围和API(例如,在同意屏幕配置页面上)。

New access token Consent screen & Scopes Monitoring scopes

点击 "请求令牌"。浏览器将打开 pstmn.io 应用的 Google OAuth 许可屏幕。如有必要,请登录并授权访问。在流程结束时,将打开一个弹出窗口(请确保它没有被您的浏览器阻止),将您重定向回 Postman 应用程序。

去使用你的令牌吧!

Token usage


1
似乎您所发出的请求使用了您未要求的范围。 - madhead
1
@JimC,请看一下更新后的答案。我添加了一个截图。这些范围确实取决于项目,你应该选择你需要的那些。 - madhead
1
当然。这意味着您应该添加所需的范围。在我的示例中,我使用 Gmail 范围,因为我演示了如何使用 Gmail API。 - madhead
1
@JimC。请看另一个屏幕截图。只需按“添加范围”按钮,然后使用“监视”进行搜索。如果您不确定需要什么,甚至可以添加所有监视范围。 - madhead
1
没问题。你现在可以使用API了。看看我的截图,那里也有一个警告三角形。这只是意味着你还不能发布你的应用程序并拥有超过100个用户,但是自己使用API完全没有问题。 - madhead
显示剩余15条评论

3
您无法通过此方法实现登录Google帐户的目标。客户端ID和客户端密钥不是您的用户名和密码,而是用于身份验证客户端的凭据。
如果您想使用Google用户凭据,则需要实施受支持的Google OAuth Flow。有几种方法,但所有方法都涉及使用Web浏览器处理用户名和密码输入。
为了生成OAuth令牌(访问/身份/刷新),您还需要指定访问范围。这可能需要对您的应用程序进行安全审计。因此,我建议您使用Google支持的库,除非您想了解OAuth Flows的实现细节。 作为最终用户进行身份验证

关于您对“客户端ID和客户端密钥不是您的用户名和密码。它们是用于身份验证客户端的凭据。”的评论,我完全明白了。此外,我希望Postman弹出一个浏览器,这样我就可以登录到gmail了。gcloud也是一样的情况。顺便问一下,您确定我不能像我现在这样使用Postman请求令牌吗?似乎有人已经成功实现了https://dev59.com/XFwY5IYBdhLWcg3w5rWq - Jim C
1
我的答案是回答你的问题。关于链接,如果你使用正确的凭据,你将收到一个URL来输入到浏览器中。尝试按照提供的链接中的步骤进行操作,如果没有浏览器处理身份验证或遵循Google规则的浏览器插件,它今天将无法工作。Google不希望机器人能够强制登录。现在,Google要求人类交互作为认证过程的一部分。今天,使用链接方法最好的结果就是在你的帐户上使用安全锁定。 - John Hanley
感谢您的所有贡献。看起来确实是可能的:“我想请求一个令牌,以便我可以在我的Gmail帐户中登录我的Postman,然后我可以调用Google Cloud APIs”。看来我只是走错了步骤。 - Jim C

0
我曾有相同的问题,并通过修复不正确(可能过时)的API网址来解决它。
确保您使用正确的授权端点URL。为此,请下载包含授权应用程序所需信息的JSON文件。您可以通过从左侧菜单中的“主页> API和服务>凭据”,然后选择“OAuth 2.0客户端ID”来访问文件链接。

enter image description here

它将提供以下信息:
{
    "web": {
        "client_id": "xxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
        "project_id": "xxxxxxxxxxxxxx",
        "auth_uri": "https://accounts.google.com/o/oauth2/auth",
        "token_uri": "https://oauth2.googleapis.com/token",
        "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
        "client_secret": "xxxxxxxxxxxxxxxxxxxxxxx",
        "redirect_uris": [
            "https://oauth.pstmn.io/v1/browser-callback"
        ]
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接