oauth2.0 从重定向URL检索授权码

ktecyv1j  于 2023-02-11  发布在  其他
关注(0)|答案(2)|浏览(272)

我正在尝试使用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获取此代码。我相信将需要一个服务器,它可以设置,但除此之外,我不知道从哪里开始。

qhhrdooz

qhhrdooz1#

在OAuth流程中,浏览器被重定向到重定向URI,因此实际上您访问的页面可以在您的重定向URI下找到。正如您所注意到的,授权码将作为查询字符串的一部分附加到重定向URI。
您有两种选择:
1.你可以有一个后端服务,比如一个服务器,它监听你的重定向URI,在那里你会有一个控制器处理发送到重定向URI的请求,它可以读取查询字符串--也就是授权码,然后执行令牌请求(如您在示例中所述),然后对它得到的访问令牌做一些事情。例如,你可以把访问令牌和会话标识符一起保存在数据库中,这样每当用户发送带有会话cookie的请求时,您可以从数据库读取访问令牌来访问API。
1.您可以在重定向URI下创建一个前端应用程序。然后您可以运行粘贴到浏览器中的代码。您可以使用javascript获取当前页面的查询字符串(例如,通过调用window.location.search,然后使用&作为分隔符拆分字符串)。当您获得访问令牌时,您可以将其存储在内存或本地存储器中,以便您的前端应用程序使用。

11dmarpk

11dmarpk2#

这是一个使用IE库的VBA解决方案:

Function GetAuthCodeIE(myURL As String) As String
    Const READYSTATE_COMPLETE As Long = 4
    
    Dim oIE As Object
    
    Set oIE = CreateObject("InternetExplorer.Application")
    
    Call oIE.Navigate(myURL)
    
    While oIE.Busy Or oIE.ReadyState <> READYSTATE_COMPLETE
        DoEvents
    Wend
    
    Dim Response As String
    Response = oIE.LocationURL
    
    Dim aResponse() As String
    aResponse = Split(Response, "?")
    
    aResponse = Split(aResponse(1), "&")
    GetAuthCodeIE = Replace(aResponse(0), "code=", "")
End Function

相关问题