Bearer-token in der (OAuth Authorization request-header für die REST-API-POST-Aufruf
Hey, ich bin versucht, herauszufinden, wie dies zu tun OAuth authorization token für einen REST-API-POST-Aufruf.
Den Dokumente-Zustand:
With a valid access token, your app can make calls to any Yammer API endpoint by sending the access token as a “Bearer” token in the “Authorization” request header.
GET /api/v1/messages/following.json HTTP/1.1
Host: www.yammer.com
Authorization: Bearer abcDefGhiFor
more details on the “Bearer” token refer to [enter link description here][1]
If the access token expires or the user de-authorizes your app, the API request will return an HTTP 401 with the following error in the body of the response.
{
"response": {
"message": "Token not found.",
"code": 16,
"stat": "fail"
}
}
Ihre app anfordern können Sie eine neue access-token durch erneutes ausführen der entsprechenden fließen, wenn dieser Fehler Auftritt.
Derzeit meine VB.net code ist:
Dim request As HttpWebRequest
Dim response As HttpWebResponse = Nothing
Dim reader As StreamReader
Dim address As Uri
Dim data As StringBuilder
Dim byteData() As Byte
Dim postStream As Stream = Nothing
address = New Uri("https://www.yammer.com/api/v1/messages.json")
request = DirectCast(WebRequest.Create(address), HttpWebRequest)
request.Method = "POST"
request.Headers("Authorization") = "Bearer " & yammerAPI.userToken
request.ContentType = "application/json"
request.Host = "www.yammer.com"
Dim body As String = "test"
Dim replied_to_id As Integer = 123456789
Dim group_id As Integer = 123456789
data = New StringBuilder()
'data.Append("&replied_to_id=" & HttpUtility.UrlEncode(replied_to_id))
data.Append("group_id=" & HttpUtility.UrlEncode(group_id))
data.Append("&body=" & HttpUtility.UrlEncode(body))
byteData = UTF8Encoding.UTF8.GetBytes(data.ToString())
request.ContentLength = byteData.Length
Try
postStream = request.GetRequestStream()
postStream.Write(byteData, 0, byteData.Length)
Finally
If Not postStream Is Nothing Then postStream.Close()
End Try
Try
response = DirectCast(request.GetResponse(), HttpWebResponse)
reader = New StreamReader(response.GetResponseStream())
Debug.Print(reader.ReadToEnd())
Finally
If Not response Is Nothing Then response.Close()
End Try
Ich erhalte eine Fehlermeldung von: Der Remoteserver hat einen Fehler zurückgegeben: (401) nicht autorisiert.
Ich fand dies in einem folgenden Stackoverflow-posting:
Den Yammer-API erfordert die OAuth-Daten werden in der Kopfzeile. Wenn Sie sich bei Ihrem Beispiel um Daten, sehen Sie die Anfrage aussieht.
GET /api/v1/Nachrichten/favorites_of/1234 HTTP/1.1
HOST: www.yammer.comAuthorization: OAuth oauth_consumer_key="KsTROcNF1Fx3e1PwA",oauth_token="vlVH7A7DOm9wXuHdv58A",oauth_signature_method="PLAINTEXT",oauth_timestamp="1297383841092",oauth_nonce="1047685618",oauth_verifier="E4F8",oauth_signature="yPsEvDnNPIA8xGCFLvMJ73K0DD9ivMpAtjefoso%26fSFh9UPkHQ6oRwK5OTne33ltnSnbQ9xraha72heg"
Die OAuth-Daten ist der in der Authorization-header und nicht in der URL. Die einzige Zeit, die Sie haben alle die OAuth-Daten in der URL, wenn Sie das genehmigen.
Jede Hilfe würde groß sein, um das zu verstehen, mehr!
- Wie sind Sie mit der Beschaffung
yammerAPI.userToken
? - Gehen wenn jeder Zustand (mit webbrowser). Anmeldung in yammer, umgeleitet über meine redirect-link der app die Orte der code am Ende des (blahblah.com/?code=XYZ). Dann nehme ich diesen code und dies Dim url As String = "yammer.com/oauth2/access_token.json?client_id=" & clientID & "&client_secret=" & clientSecret & "&code=" & authorizedToken und analysieren Sie die JSON und erhalten Sie access_token aus, dass. Die access_token ist meine yammerAPI.userToken.
- Blick auf das code-Beispiel in [diese Frage][1]. [1]: stackoverflow.com/questions/14188938/...
- Könnten Sie mir etwas mehr Informationen über, wie zu gehen über die Suche nach dem oauth_consumer_key, oauth_timestamp, oauth_nonce, oauth_verifier & oauth_signature?? Alle yammer Dokumente besagen, dass es nur noch zum senden der Träger + token ist genug in den header?
- Wenn Sie Folgen Sie den Yammer docs in der Einleitung reden Sie über die Einrichtung der OAuth, so dass Sie bekommen können, die benötigt OAuth-client-ID, etc. Sobald die Genehmigung ist setup verwenden Sie den Träger, um Daten bitten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mein letzten Erfahrungen mit Oauth schlägt der content-Typ sollte:
Request.ContentType = "application/x-www-form-urlencoded"
Request.Method = "POST"
Request.ContentLength = byteArray.Length
eher als Wunsch.ContentType = "application/json"