Twitter API 仅应用程序身份验证

Twitter API application-only authentication

我正在按照文档使用 Twitter API 实施 OAuth: Application-only authentication 我使用 Consumer key & Consumer Secret 创建了 POST 请求,如下所示:

POST http://api.twitter.com/oauth2/token
Authorization:  Basic T3k2TlA4SnpCVGRiNXlFTUt2dGswamJGSTpiSlpEYm1xeExyeDJKU25JbUplcWdlQTJkREcwZXg0bUNtOUdGTGJ1TGF3TkZkNkxqNg==
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
grant_type=client_credentials

我收到的回复有以下错误:

"{"errors":[{"code":99,"label":"authenticity_token_error","message":"Unable to verify your credentials"}]}"

不过,我正在从我的应用程序设置中获取数据

我收到了你的请求令牌。

重要!您之后必须使安全令牌失效,永远不会在public资源上分享您的凭据,提供一些虚拟数据。

您的问题在第 "Invalid requests to obtain or revoke bearer tokens"

章的文档中有所描述

grant_type=client_credentials不是header,而是请求的body:

curl --request POST \
  --url https://api.twitter.com/oauth2/token \
  --header 'authorization: Basic T3k2TlA4SnpCVGRiNXlFTUt2dGswamJGSTpiSlpEYm1xeExyeDJKU25JbUplcWdlQTJkREcwZXg0bUNtOUdGTGJ1TGF3TkZkNkxqNg==' \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data grant_type=client_credentials

额外的 :也许问题是您使用的是 http://... URL,而正确的是使用 https://... link

按照2个步骤。我自己完成并测试了它。它工作正常,你将能够获得访问令牌

步骤 1)

在您的情况下,您必须将以下两个值替换为您的消费者密钥和密码:

Cosumer 密钥 = xvz1evFS4wEEPTGEFPHBog

消费者机密 = L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg

使用消费者密钥和消费者秘密,我们必须生成一个 base 64 字符串。因此,要做到这一点,我们必须首先使用冒号 (:) 作为分隔符

连接消费者密钥和消费者秘密

所以在我的例子中,连接的字符串将是:

xvz1evFS4wEEPTGEFPHBog:L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg

注意:连接字符串中不应有white-space

现在我们已经准备好连接字符串了。现在我们必须生成 base 64 字符串。为此,我们可以使用在线服务来做到这一点。 打开此 URL http://www.motobit.com/util/base64-decoder-encoder.asp 并粘贴您的连接字符串并单击 "Convert the source code"。这将为您提供 Base 64 字符串。

在我的例子中,Base 64 字符串是(你的情况会有所不同):

xvz1evFS4wEEPTGEFPHBog:L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg

现在,通过使用我们的 Base64 字符串,我们必须生成 Base 64 编码字符串。为此,我们可以使用在线服务。打开 link https://www.base64encode.org/ 并粘贴我们的 Base64 字符串并单击 "Encode"。

最后您将获得我们必须在令牌请求中使用的 Base64 编码字符串。 就我而言,它看起来像这样:

eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJnNmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==

步骤 2)

现在打开你的 POSTMAN(它是 google chrome 的插件,用于测试 API's)并执行以下步骤 :(我附上截图POSTMAN 请求,如果您是 POSTMAN 的新手,请查看它)

  1. 请求必须是 HTTP POST 请求。 url 是:https://api.twitter.com/oauth2/token
  2. 请求必须包含值为 Basic 的授权 header。 例如:

    基本 eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJnNmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==

  3. 请求必须包含一个 Content-Type header,其值为 application/x-www-form-urlencoded; 例如:Content-Type=application/x-www-form-urlencoded
  4. 点击 Body->Raw 并输入 grant_type=client_credentials

点击发送,您将获得访问令牌。

如果您在执行此步骤时遇到任何问题,请告诉我。

您的 header 应使用这种格式,而 Twitter 使用 OAuth 1.0

Authorization:OAuth oauth_consumer_key="{consumer-key}",oauth_token="{oauth token},oauth_signature_method="HMAC-SHA1",oauth_timestamp="1500034490",oauth_nonce="ycnFHs",oauth_version="1.0",oauth_signature="{oauth-signature}"

我认为你们中的一些人可能在生成 Base64 编码的不记名令牌凭据时遇到问题(您在授权中使用 Basic XXX 传递的内容 header)

然后基本身份验证(授权选项卡)可以帮助您:

Basic Auth

它会自动添加适当的授权 header 值

Authorization header

参考:https://developer.twitter.com/en/docs/basics/authentication/overview/application-only