我有一个带有优步API集成的iOS应用程序,我使用SSO对用户进行身份验证,然后保存accessToken&我的设备本地刷新了。然后我打电话给我的服务器,他使用javascript后台函数调用node-uber(https://www.npmjs.com/package/node-uber)库向Uber发出请求。 到目前为止,我正在尝试使用SSO登录中的2个本地令牌设置超级客户端,如下所示:
var uber = new uberClient({
client_id: '...',
client_secret: '...',
server_token: '...',
name: 'My App',
sandbox: true, //optional
access_token: accessToken,
refresh_token: refreshToken
});
之后我想像这样调用uber.requests.getEstimatesAsync端点:
uber.requests.getEstimatesAsync({
"start_latitude": pickupLocation["lat"],
"start_longitude": pickupLocation["lng"],
"end_latitude": dropoffLocation["lat"],
"end_longitude": dropoffLocation["lng"]
})
.then(function(res) {
console.log(JSON.stringify(res));
})
.error(function(err) {
console.error(err);
});
})
虽然每次我在执行此操作时都会收到“invalid_grant”错误400。我是否在验证自己身份或设置优步客户端时出错?甚至可以使用我的SSO accessToken& refreshToken然后在超级客户端上进行OAuth2身份验证?我认为访问和刷新令牌应该与Uber发送回SSO& OAuth2用户。 我正在使用开发人员帐户执行此操作,因此我实际上应该拥有请求端点所需的所有权限,但我之前也在应用程序中正确获取了这些权限。
官方优步文件中的这个帖子解释了潜在的原因,但我猜他们并不真正适用于我的情况,是吗? https://developer.uber.com/docs/riders/guides/authentication/introduction#common-problems-and-solutions
这里的任何安全专家都可以提供帮助吗? 最好的祝福, 马特
P.S。:我也在我用来提出这些请求的优步图书馆上发布了这个问题,但到目前为止似乎没有人能够帮助我。 https://github.com/shernshiou/node-uber/issues/70
编辑:下图显示了到目前为止我的身份验证设置:
答案 0 :(得分:0)
我找到了解决方案。我认为图书馆本身存在问题。因为一旦我使用"请求"库(https://github.com/request/request)它有效。包含在代码顶部的内容:
var request = require('request');
OAuth2和SSO accessToken都有效。你应该为方法提供一个纬度和经度的pickupLocation以及你从Uber获得的accessToken,如下所示:
function getAllAvailableUberProducts(pickupLocation, accessToken){
var lat = pickupLocation["lat"].toString();
var lng = pickupLocation["lng"].toString();
var options = {
uri: "https://api.uber.com/v1.2/products?latitude="+lat+"&longitude="+lng,
method: 'GET',
headers: {
"Authorization": "Bearer " + accessToken,
"Accept-Language": "en_US",
"Content-Type": "application/json"
}
};
request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(JSON.parse(body).products);
} else {
console.log(error);
}
});
}
我希望这有助于某人。