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 的新手,请查看它)
- 请求必须是 HTTP POST 请求。 url 是:https://api.twitter.com/oauth2/token
请求必须包含值为 Basic 的授权 header。
例如:
基本 eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJnNmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==
- 请求必须包含一个 Content-Type header,其值为 application/x-www-form-urlencoded;
例如:Content-Type=application/x-www-form-urlencoded
- 点击 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)
然后基本身份验证(授权选项卡)可以帮助您:
它会自动添加适当的授权 header 值
参考:https://developer.twitter.com/en/docs/basics/authentication/overview/application-only
我正在按照文档使用 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 的新手,请查看它)
- 请求必须是 HTTP POST 请求。 url 是:https://api.twitter.com/oauth2/token
请求必须包含值为 Basic 的授权 header。 例如:
基本 eHZ6MWV2RlM0d0VFUFRHRUZQSEJvZzpMOHFxOVBaeVJnNmllS0dFS2hab2xHQzB2SldMdzhpRUo4OERSZHlPZw==
- 请求必须包含一个 Content-Type header,其值为 application/x-www-form-urlencoded; 例如:Content-Type=application/x-www-form-urlencoded
- 点击 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)
然后基本身份验证(授权选项卡)可以帮助您:
它会自动添加适当的授权 header 值
参考:https://developer.twitter.com/en/docs/basics/authentication/overview/application-only