Twitter API仅应用程序身份验证

时间:2017-07-13 11:12:28

标签: api twitter-oauth

我正在使用Twitter API按照文档实施OAuth:  Application-only authentication 我使用Consumer key&创建了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“:”无法验证您的凭据“}]}”

虽然,我从我的应用设置中获取数据

4 个答案:

答案 0 :(得分:9)

按照以下两个步骤操作。我自己做过&测试它。它工作正常,你将能够获得访问令牌

步骤1)

在您的情况下,您必须使用您的消费者密钥&更换以下两个值。秘密:

Cosumer密钥 = xvz1evFS4wEEPTGEFPHBog

消费者秘密 = L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg

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

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

xvz1evFS4wEEPTGEFPHBog:L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg

注意:连接字符串中不应有空格

所以现在我们已经准备好了我们的串联字符串。现在我们必须生成base 64字符串。为此,我们可以使用在线服务来执行此操作。 打开此网址http://www.motobit.com/util/base64-decoder-encoder.asp并粘贴您的连接字符串&单击“转换源代码”。这将为您提供Base 64字符串。

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

<强> xvz1evFS4wEEPTGEFPHBog:L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg

现在,通过使用我们的Base64字符串,我们必须生成Base 64编码字符串。所以,为此,我们可以使用在线服务。打开链接https://www.base64encode.org/并粘贴我们的Base64字符串&amp;点击“编码”。

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

<强> eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJnNmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw ==

第2步)

现在打开你的POSTMAN(这是用于测试API的谷歌浏览器的插件)&amp;执行以下步骤:(我正在附上POSTMAN请求的屏幕截图,如果您是POSTMAN的新手,请查看它)

  1. 请求必须是HTTP POST请求。和网址是:https://api.twitter.com/oauth2/token
  2. 请求必须包含值为Basic的Authorization标头。 例如:

    基本eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVAaeVJnNmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw ==

  3. 请求必须包含一个Content-Type标头,其值为application / x-www-form-urlencoded; 例如:Content-Type = application / x-www-form-urlencoded
  4. 点击Body-&gt; Raw并输入 grant_type = client_credentials
  5. enter image description here

    enter image description here

    点击SEND,&amp;您将获得访问令牌。

    如果您在执行此步骤时遇到任何问题,请与我们联系。

答案 1 :(得分:4)

我收到了一条带有您请求的令牌。

重要!您必须在此之后使安全令牌无效,从不在公共资源上共享您的凭据,提供一些虚拟数据。

您的问题在第34章中的文档中有所描述;获取或撤销持有人令牌的请求无效&#34;

grant_type=client_credentials不是标题,而是请求正文:

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://...网址,而正确的是使用https://...链接

答案 2 :(得分:2)

此类型的格式应在您的标题中使用,而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}"

答案 3 :(得分:0)

我认为你们中的某些人可能无法生成Base64编码的承载令牌凭证(您在Authorization标头中使用Basic XXX传递的内容)

然后,“基本身份验证”(“授权”标签)可以为您提供帮助:

Basic Auth

它将自动添加带有值的适当Authorization标头

Authorization header

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