在python中提供的Uber身份验证的OAuth 2.0凭据无效



我正在使用python集成Uber服务器端API。我能够成功运行授权流并获得访问令牌。

使用收到的访问令牌,我可以获得用户档案、用户历史等信息。但是,每当我(使用Sandbox)进行骑乘请求时,就会发生以下错误。

HTTP/1.1 **401 Unauthorized**<br/>
Server: nginx<br/>
Date: Tue, 03 May 2016 09:29:19 GMT<br/>
Content-Type: application/json<br/>
Content-Length: 75<br/>
Connection: keep-alive<br/>
X-Uber-App: uberex-sandbox<br/>
Strict-Transport-Security: max-age=0<br/>
X-Content-Type-Options: nosniff<br/>
X-XSS-Protection: 1; mode=block
{"message":"Invalid OAuth 2.0 credentials provided.","code":"unauthorized"}.

我找不到我到底错过了什么。有人能提出可能的问题吗?

在这种情况下,授权错误"unauthorized"表示您正在使用的访问令牌不足以用于尝试调用的端点。因为您描述了访问令牌对其他端点(如GET /v1/me)有效,但对POST /v1/requests无效,所以我推测访问令牌未被授权用于request作用域。

您可以通过两种方式进行检查:

  • 在令牌交换响应中,列出了已授予的作用域
  • 如果您使用的是优步OAuth的v2版本,那么您的访问令牌很可能是签名的JWT。使用JWT.io上的调试器可以查看您的访问令牌已被授权的作用域

如果访问令牌实际上缺少request作用域,则只需要在将用户发送到授权url时显式指定该作用域。

例如https://login.uber.com/oauth/v2/authorize?client_id=123&scopes=profile%20request...

请记住,request作用域是一个有限的访问作用域,这意味着您可以在开发过程中为其授权OAuth应用程序的所有者和任何注册开发人员。准备好生产后,向优步提交申请,并附上您完成的应用程序的演示。

最新更新