我正在尝试使用Destiny 2 API并检索从他们的API发送的信息,而作为OAuth2的新手,检索授权码是我碰壁的地方。
我有这个代码:
async function get(url, callback) {
var clientID = process.env.BUNGIE_CLIENTID;
var authorizationCode = 'CODE_GOES_HERE';
var xhr = new XMLHttpRequest();
xhr.open("POST", "https://www.bungie.net/Platform/App/OAuth/Token/", true);
xhr.setRequestHeader("X-API-Key", process.env.BUNGIE_API);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("client_id="+ clientID + "&grant_type=authorization_code&code=" + authorizationCode);
xhr.onreadystatechange = function () {
callback.apply(xhr);
}
};
这将向我发送访问Destiny API中某些信息所需的访问令牌。但是,使用此代码,当用户批准我的应用程序时,我将不得不从重定向URL手动检索授权代码,这不会削减它。Destiny API文档如果模糊,就像OAuth2上的许多其他来源一样,说明"获取授权代码"。
从我所了解到的用户将批准应用程序,然后被重定向到一个重定向URL与
"?代码= {授权代码}"
附加到URL的末尾。我不知道从哪里开始从URL获取此代码。我相信将需要一个服务器,它可以设置,但除此之外,我不知道从哪里开始。
2条答案
按热度按时间qhhrdooz1#
在OAuth流程中,浏览器被重定向到重定向URI,因此实际上您访问的页面可以在您的重定向URI下找到。正如您所注意到的,授权码将作为查询字符串的一部分附加到重定向URI。
您有两种选择:
1.你可以有一个后端服务,比如一个服务器,它监听你的重定向URI,在那里你会有一个控制器处理发送到重定向URI的请求,它可以读取查询字符串--也就是授权码,然后执行令牌请求(如您在示例中所述),然后对它得到的访问令牌做一些事情。例如,你可以把访问令牌和会话标识符一起保存在数据库中,这样每当用户发送带有会话cookie的请求时,您可以从数据库读取访问令牌来访问API。
1.您可以在重定向URI下创建一个前端应用程序。然后您可以运行粘贴到浏览器中的代码。您可以使用javascript获取当前页面的查询字符串(例如,通过调用
window.location.search
,然后使用&
作为分隔符拆分字符串)。当您获得访问令牌时,您可以将其存储在内存或本地存储器中,以便您的前端应用程序使用。11dmarpk2#
这是一个使用IE库的VBA解决方案: