当前位置: 首页 > 知识库问答 >
问题:

REST API POST调用的(OAuth)授权请求头中的承载令牌

晏鸿畅
2023-03-14

嘿,我想弄清楚如何为REST API POST调用使用OAuth授权令牌。

文件规定:

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"
  }
}

如果发生此错误,您的应用程序可以通过重新运行相应的流来请求新的访问令牌。

目前我的VB. net代码是这样的:

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

我不断收到一个错误:远程服务器返回一个错误:(401)未经授权。

我在下面的帖子中发现了这一点:

Yammer API要求OAuth数据位于标头中。如果您查看他们获取数据的示例,您将看到请求如下所示。

GET/api/v1/messages/favorites_of/1234 HTTP/1.1主机:www.yammer。通用域名格式

授权:OAuthoauth_consumer_key="KsTROcNF1Fx3e1PwA",oauth_token="vlVH7A7DOm9wxhdv58A",oauth_signature_method="PLAINTEXT",oauth_timestamp="1297383841092",oauth_nonce="1047685618",oauth_verifier="E4F8",oauth_signature="yPsEvDnNPIA8xGCFLvMJ73K0DD9ivMpATJeFOSO&fSFh9UPkHQ6oRwK5OTne33ltd nSnbQ9XrAhA72heg"

OAuth数据位于授权标头中,而不是URL中。URL中只有在执行授权时才有OAuth数据。

任何帮助将是伟大的理解这更多!

共有1个答案

侯向文
2023-03-14

我最近使用Oauth的经验表明,内容类型应该是:

请求。ContentType=“application/x-www-form-urlencoded”请求。Method=“POST”请求。ContentLength=byteArray。长度

而不是请求。ContentType="应用程序/json"

 类似资料:
  • 我已经使用Jhipster生成了一个带有安全选项OAuth2.0/OIDC身份验证的应用程序。我按照http://www.jhipster.tech/security/#Okta的说明重新配置了该应用程序,使用Okta而不是keycloak。所有工作都按预期进行,登录流也按预期执行。 现在我想使用OAuth2.0access_tokens从其他客户机(Postman、Wordpress)访问我的a

  • 试图让OAuth2谷歌登录工作,这是我的应用程序发出的原始请求: : : : : 这是回应: 状态: null 对此的帮助将不胜感激。我试图在我的应用程序中设置OAuth2支持的“用X登录”功能,已经让脸书和推特没有问题地工作,也想让谷歌工作,但如果我不能解决这个问题,我恐怕我将不得不放弃谷歌Auth。

  • 这是云运行中的bug,还是我们需要做一些不同的事情来获得完整的承载令牌?

  • 我目前正在客户端应用程序上使用和。我用另一个请求回调()运行一个axios请求(),在第一个请求的响应中,我收到一个新的令牌。我尝试在回调的headers载体中设置这个新内标识。这不起作用:在回调()时,没有设置新的令牌,并且在头中没有设置更多的授权承载。 你知道问题出在哪里吗?

  • 我已经编写了一个云函数,该函数接收一个Base64字符串并将其传递到Google Cloud Vision API中,我还在客户端上编写了一个函数,该函数通过HTTP调用Firebase云函数。 虽然数据可以很好地从客户端传递到云功能,但服务器对Google Vision API的请求不起作用。我得到一个状态码错误。 我很确定这与授权承载令牌有关,因为在shell中使用环境变量运行它就可以了。顺便

  • 我将授权:承载{令牌}作为HTTP请求传递给我的SymfonyRest控制器。 我的请求: 在我的控制器内: 由于某种原因,当我使用Symfony的请求方法时,授权标头对我的控制器不可用。当我使用PHP的getallheaders()时,授权头将按预期显示。你知道为什么Symfony没有看到吗? 谢谢