0
我已经尝试了很多次,我还是得到了错误使用API访问令牌的OAuth 2.0 - 错误“的远程服务器返回错误:(401)未经授权”
The remote server returned an 'error: (401) Unauthorized
请建议给我,我真的很感激它。
Public Class iFormAPIMethods
'iFormBuilder API info
Private API_ClientKey As String = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Private API_ClientSecret As String = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Private BaseURL As String = "app.iformbuilder.com"
Private FullURL As String = "https://" & BaseURL & "/exzact/api/v60/token"
'Quotation Mark Character for substitution
Private q As Char = Chr(34)
'JWT Claim Set Parameters
Property iss As String = API_ClientKey
Property aud As String = FullURL
Property AccessToken As String
Public Sub New()
End Sub
Public Sub GetAccessToken()
ServicePointManager.Expect100Continue = True
'ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
'Build web request
Dim uriAddress As New Uri(FullURL)
Dim wRequest As HttpWebRequest = DirectCast(HttpWebRequest.Create(uriAddress), HttpWebRequest)
Dim strPostData As String = ""
Dim bytPostData As Byte()
Dim stJWT As String
'Get JWT
stJWT = CreateJWT()
'Post Data ---
strPostData = "grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=" & stJWT
'Post Data --- to byte()
bytPostData = Encoding.UTF8.GetBytes(strPostData.ToString)
'Set Web Request Properties
With wRequest
.Method = "POST"
.ContentType = "application/x-www-form-urlencoded"
.ContentLength = bytPostData.Length
End With
'Post Request and Get Response
Using postStream As Stream = wRequest.GetRequestStream()
postStream.Write(bytPostData, 0, bytPostData.Length)
Dim rawResponseFromServer = ""
Try
Using response As HttpWebResponse = wRequest.GetResponse()
Dim reader As New StreamReader(response.GetResponseStream())
rawResponseFromServer = reader.ReadToEnd()
Dim o As JObject = JObject.Parse(rawResponseFromServer)
Me.AccessToken = o.Item("access_token").Value(Of String)()
End Using
Catch wex As WebException
If Not wex.Response Is Nothing Then
MsgBox(wex.Message)
Debug.WriteLine("Resulting Error --- " & wex.Message & vbNewLine & wex.StackTrace)
End If
Exit Sub
End Try
End Using
End Sub
地区 “HelperFunctions”
Private Function CreateJWT() As String
Dim JWT As String
Dim EncodedJWT As Byte()
'Build Header and Claim Set String
Dim strHeader As String = Strings.Replace("{'alg':'HS256','typ':'JWT'}", "'", q)
'Dim strClaimSet As String = Strings.Replace("{'iss':'" & iss & "', 'aud':'" & aud & "', 'exp':" & exp() & ", 'iat':" & iat() & "}", "'", q)
'Build JWT String
JWT = ToBase64URL(strHeader) & "." & ToBase64URL(strClaimSet)
'Convert Client Secret to UTF8 Byte()
Dim bytKey As Byte() = System.Text.Encoding.UTF8.GetBytes(API_ClientSecret)
'Encode JWT String
Dim hmac_encode As HMACSHA256 = New HMACSHA256(bytKey)
EncodedJWT = hmac_encode.ComputeHash(System.Text.Encoding.UTF8.GetBytes(JWT))
'Sign and return JWT
Dim signature As String = ToBase64URL(EncodedJWT)
Return JWT & "." & signature
End Function
Private Function ToBase64URL(Text As String) As String
Dim b As Byte() = System.Text.Encoding.UTF8.GetBytes(Text)
Return ToBase64URL(b)
End Function
Private Function ToBase64URL(byt As Byte()) As String
Dim result As String
'Convert to base 64 string
result = Convert.ToBase64String(byt)
'Make URL Friendly
result = result.Replace("+", "-").Replace("/", "_")
Do While result.Chars(result.Length - 1) = "="
result = Strings.Left(result, result.Length - 1)
Loop
Return result
End Function
Public ReadOnly Property exp(ExpirationSeconds As Integer) As Long
Get
Dim iats As Long
iats = iat() + ExpirationSeconds
Return iats
End Get
End Property
Public ReadOnly Property iat() As Long
Get
Dim StartDate As Date = CDate("09/01/2016")
Dim EndDate As Date = CDate(Now.ToUniversalTime)
Dim val As Long = DateDiff(DateInterval.Second, StartDate, EndDate)
Return val
End Get
End Property
端部区域
末级