【问题标题】:How to fix "error: (401) Unauthorized" when trying to get OAuth grants from backpack.tf?尝试从packet.tf获取OAuth授权时如何解决“错误:(401)未经授权”?
【发布时间】:2019-02-04 14:17:32
【问题描述】:

我正在尝试从 https://backpack.tf/ 获得 OAuth 授权,如开发人员页面中所述:https://backpack.tf/developer/pages/oauth_grants

这是我的代码:

Imports System.Net
Imports System.IO
Imports System.Text 

Public Class Form1   
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim client_id As String = "myclientid"
    Dim client_secret As String = "myclientsecret"


    Dim resp As String = WebRequestPOST("https://backpack.tf/oauth/access_token", client_id, client_secret)

    RichtextBox1.Text = resp
End Sub


Public Function WebRequestPOST(ByVal url As String, ByVal client_id As String, ByVal client_secret As String) As String
    Dim wrequest As HttpWebRequest = HttpWebRequest.Create(url)
    wrequest.ContentType = "application/x-www-form-urlencoded"
    wrequest.Accept = "1.0"       
    wrequest.Method = "POST"        


    Dim postData As String = "grant_type=client_credentials&client_id=" & client_id & "&client_secret=" & client_secret & "scope=read write"

    Dim postDataByte As Byte() = Encoding.UTF8.GetBytes(postData)

    Using Writer As New IO.BinaryWriter(wrequest.GetRequestStream)
        Writer.Write(postDataByte)
    End Using

    Dim wresponse As String = ""
    Try
        wresponse = New StreamReader(wrequest.GetResponse.GetResponseStream(), Encoding.Default).ReadToEnd
    Catch ex As Exception
        wresponse = ex.ToString
        Return wresponse
    End Try

    Return wresponse
End Function
End Class

它总是返回“System.Net.WebException:远程服务器返回错误:(401)未经授权。 在 System.Net.HttpWebRequest.GetResponse()"

我尝试了许多不同的方法,例如添加:

 wrequest.Headers.Add("Authorization", "myUserToken")

或:

wrequest.Headers.Add("Authorization", "bearer myUserToken")

(和 reddit OAuth 一样)但结果还是一样

我无法在https://backpack.tf/developer/ 上找到有关它的更多信息,甚至无法通过阅读 github 中所有现有机器人的代码。

使用 DotNetOpenAuth 库也无济于事

【问题讨论】:

    标签: vb.net oauth


    【解决方案1】:

    假设您的客户端 ID、客户端密码、范围和授权类型的值正确/正确(如果其中任何一个错误,您可能会收到 401 响应,但这取决于服务器代码,我我不熟悉这个),你在构建postdata body时确实有一个错误。

    您缺少范围参数的'&'分隔符,这将使客户端密码包含范围,这肯定会使客户端密码错误。

    . . . "&client_secret=" & client_secret & "&scope=read write"
                                               ^
    

    【讨论】:

    • 我为忘记一个“&”而感到难过!太感谢了!!!现在可以了!!!!
    • 不客气。当它为您提供解决方案时,请考虑接受答案。
    • 还不习惯这个网站。现在已经完成了。再次感谢
    猜你喜欢
    • 2020-01-24
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2017-09-27
    • 2012-12-20
    • 2012-01-28
    相关资源
    最近更新 更多