gpt4 book ai didi

ios - 在 App 中从 SSO 获取 access_token 时 OAuth2 请求上的 invalid_grant

转载 作者:行者123 更新时间:2023-11-28 08:00:20 24 4
gpt4 key购买 nike

我有一个带有 Uber API 集成的 iOS 应用程序,我在其中使用 SSO 对用户进行身份验证,然后将 accessToken 和 refreshToken 保存在我的本地设备上。然后我调用我的服务器,它使用 javascript 后台函数调用 node-uber ( https://www.npmjs.com/package/node-uber ) 库向 Uber 发出请求。到目前为止,我正在尝试使用来自 SSO 登录的 2 个本地 token 设置 super 客户端,如下所示:

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。我是在验证自己还是错误地设置了 Uber 客户端?甚至可以在执行 OAuth2 身份验证的 super 客户端上使用我的 SSO accessToken 和 refreshToken 吗?我认为访问 token 和刷新 token 应该与 Uber 发回的用于 SSO 和 OAuth2 的 token 相同。我正在使用开发人员帐户执行此操作,因此我实际上应该拥有请求端点的所有必需权限,但我之前也在应用程序中正确获得了它们。

uber 官方文档上的这个帖子解释了潜在的原因,但我想它们并不真正适用于我的情况,是吗? https://developer.uber.com/docs/riders/guides/authentication/introduction#common-problems-and-solutions

这里有安全专家可以提供帮助吗?此致,马特

P.S.:我还在我用来提出这些请求的 Uber 库上发布了这个问题,但到目前为止似乎没有人能够帮助我。 https://github.com/shernshiou/node-uber/issues/70

编辑:下图显示了我目前的身份验证设置:

enter image description here

最佳答案

我找到了一个解决方案。我认为是图书馆本身的问题。因为一旦我使用带有“请求”库(https://github.com/request/request)的 http 发出请求,它就起作用了。在代码的顶部包括:

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);
}
});
}

我希望这对某人有帮助。

关于ios - 在 App 中从 SSO 获取 access_token 时 OAuth2 请求上的 invalid_grant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46839986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com