尝试从Backpack.tf获取OAuth授予时,如何解决“错误:(401)未经授权”问题?

时间:2019-02-04 14:17:33

标签: vb.net oauth

我正尝试从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中所有现有bot的代码来找到有关它的更多信息。

使用DotNetOpenAuth库也不帮助我

1 个答案:

答案 0 :(得分:0)

假设您具有正确的/正确的客户端ID,客户端机密,作用域和授予类型的值(如果其中任何一个错误,您可能会收到401响应,具体取决于服务器代码,而我我对此并不熟悉),那么在构造postdata正文时确实会出错。

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

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