我目前正在致力于将 Uber Rest api 与我的 Alexa 技能集成。
我无法使用 Uber API 发出乘车请求。我正在使用 API 的沙盒版本:
https://sandbox-api.uber.com/v1/requests
当我调用上述 API 时,我得到:
"401 Unauthorized" as the response.
我正在使用 Java 8 进行开发。
我正在使用 Uber 开发人员仪表板中的访问 token 。在“设置”选项卡下的“使用个人访问 token 进行测试”部分中,有一个“生成新的访问 token ”按钮。单击此按钮会生成访问 token 。
我正在授权 header 中设置上面生成的访问 token 。这是代码片段:
HttpPost httpPost = new HttpPost("https://sandbox-api.uber.com/v1/requests");
httpPost.setHeader("Authorization", "Bearer " + access_token);
我需要在 Uber 开发者仪表板的“授权”选项卡下进行任何设置吗?目前我还没有进行任何更改并保留所有内容默认。
在 header 中设置访问 token 之前是否需要对其进行编码?
请告诉我。
非常感谢。
最佳答案
遗憾的是,您无法将仪表板生成的 token 用于“受限访问”范围(例如 POST v1/requests
所需的 requests
),您必须通过 OAuth 步骤生成访问 token 以在沙盒中进行测试。
由于您无法使用仪表板 token 在沙箱中测试 POST v1/requests
端点,请尝试以下方法快速生成用于测试的 token :
在浏览器中访问此网址(将 YOUR_CLIENT_ID 替换为您的应用程序客户端 ID,将 YOUR_CALLBACK_URL 替换为您的回调 URL - 在仪表板的“授权”选项卡中设置回调 URL - 可以是
localhost
) :https://login.uber.com/oauth/v2/authorize?response_type=code&client_id= YOUR_CLIENT_ID&scope=request&redirect_uri=YOUR_CALLBACK_URL
使用您的 Uber 开发者帐户登录并点击“允许”
您将被重定向到带有
code
查询字符串的redirect_uri
,复制code
的值并将其粘贴到此中用于获取访问 token 的 cURL 命令(同时替换所需的所有其他值):curl -F 'client_secret=YOUR_CLIENT_SECRET' \ -F 'client_id=YOUR_CLIENT_ID' \ -F 'grant_type=authorization_code' \ -F 'redirect_uri=YOUR_REDIRECT_URI' \ -F 'code=CODE_FROM_REDIRECT' \ https://login.uber.com/oauth/v2/token
如果成功,您应该在响应中获得一个 access_token
。
更多信息请参见 the Authorization guide
在将访问 token 设置到 header 中之前,您也不必对其进行编码。
希望对您有所帮助!
关于java - Uber API 未经授权访问问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40094617/