【问题标题】:Twitter API application-only authenticationTwitter API 仅应用程序身份验证
【发布时间】:2017-07-13 11:12:27
【问题描述】:

我正在按照文档使用 Twitter API 实现 OAuth: Application-only authentication 我使用消费者密钥和消费者秘密创建了 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":"无法验证您的凭据"}]}"

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

【问题讨论】:

    标签: api twitter-oauth


    【解决方案1】:

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

    第 1 步)

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

    消费者键 = xvz1evFS4wEEPTGEFPHBog

    消费者机密 = L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg

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

    所以在我的情况下,连接的字符串将是:

    xvz1evFS4wEEPTGEFPHBog:L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg
    

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

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

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

    xvz1evFS4wEEPTGEFPHBog:L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg

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

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

    eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJnNmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==

    第 2 步)

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

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

      基本 eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJnNmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==

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

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

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

    【讨论】:

    【解决方案2】:

    我收到了您的请求的令牌。

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

    “获取或撤销不记名令牌的无效请求”一章的文档中描述了您的问题

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

    【讨论】:

      【解决方案3】:

      这种类型的格式应该用在你的标题中,而 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}"
      

      【讨论】:

        【解决方案4】:

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

        然后Basic Auth(授权标签)可以帮助你:

        Basic Auth

        它会自动添加适当的授权标头和值

        Authorization header

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

        【讨论】:

          猜你喜欢
          • 2018-12-26
          • 2015-06-10
          • 2013-04-29
          • 1970-01-01
          • 2013-06-13
          • 2013-03-08
          • 2018-07-17
          • 2013-03-08
          • 1970-01-01
          相关资源
          最近更新 更多