1.注册微博的开发者账户
https://developer.twitter.com / en / apply / user
填写必要信息,然后等待审核
2.添加应用
创建应用是填上必要的回调地址,网站地址,以及网站的说明信息等必填信息,注意:要勾选:使用twitter登录(重要)
3.创建好应用后进入我的应用,点击键和令牌可以看到应用的密钥
4.找到官方示例:
5.详细步骤说明:
5.1获取请求令牌:
https://api.twitter.com/oauth/request_token
请求头说明参数:
- oauth_callback,回调地址
- oauth_consumer_key,从第三方应用程序获得的
- oauth_signature_method,签名方法,有3种:HMAC-SHA1,RSA-SHA1,明文由于微博只支持HMAC-SHA1,故此参数值固定,为HMAC-SHA1
- oauth_signature,签名(此参数容易错,稍后再谈)
- oauth_timestamp,时间戳,根据1970-1-1 0:0:0到现在所经过的秒数,如1545031519
- oauth_nonce,随机字符串,注意,每次此参数都必须要不一样的,例如3d1sdf34
- oauth_version,可选参数,目前版本是1.0,故值固定为1.0,但为方便扩展,最好加上
最终以URL {参数名=参数值,&}格式发送出去,此处我给出我的发送串,参数顺序随便,但签名时有要求
成功响应参数:
成功发送后会得到返回的值未授权的组组oauth_token,oauth_token_secret(第三个只要是真就行了)
5.2重定向用户
将上一步获取到的组组组oauth_token替换到该网址后重定向
在你的项目回调方法中处理获取到的组组组oauth_token和oauth_verifier参数
5.3将请求令牌转换为访问令牌
因为上面步骤获得的组组oauth_token和oauth_verifier是有时间限制的会过期,电子杂志这里组组oauth_token和oauth_token_secret
用于未来对Twitter API的经过身份验证的请求
请求头:
参数还是差不多,只是少了oauth_callback;多了一个oauth_verifier和新的参数组oauth_token
响应:
将这两个值存储起来,以后获取信息,不需要用户再次输入用户名和密码,直接用最终组组oauth_token调用
例:调用home_timeline:
http://api.twitter.com/1/statuses/home_timeline.xml?oauth_consumer_key=gReNivhwQsHJ8401DYGtAw&oauth_nonce=365fd4ff32ffddffs2f&oauth_signature=MxEA2lODZ5QQh8icOL8z8f1PNOQ%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1280822863&oauth_token=169731880-OzvV2F9vWN2HwztmJi7HAvsOM78pU7Xc2dg4ZZX2&oauth_version=1.0
这里的组组oauth_token就是最终获取到的组组oauth_token
6.获取用户信息
获取https://api.twitter.com/1.1/account/verify_credentials.json
返回数据:
7.签名方法
7.1背景:推特的使用的是HMAC-SHA1方法进行签名,只有在认证的步骤中,需要签名而在使用API时,只要需要认证的API,都需要进行签名,方可成功调用。
7.2原理:的OAuth的认证通过用户在调用API时自行签名的结果,与API一起发送到服务器,服务器再用相同的方法进行签名,将结果与我们传过去的结果相比较,如果相同,那么签名通过,我们每次的随机串与时间戳都不一样,所以防止了重放攻击,同时这个过程中没有透露用户的账号与密码,增强了账号安全性。
7.3方法:签名需要签名串(文本)与密钥(键)
7.3.1。签名串(文本)的构成:HttpMethod&url&参数。三个红色串必须用urlencode进行编码编码中的%xx符号,httpMethod中的字母必须为大写;
参数:此次请求中的除了oauth_signature以外的所有参数按照字母顺序升序排列,如果参数名相同,那么按照参数值的字母顺序升序排列。
其中列举HTTPMethod为GET / POST / PUT / DELETE等HTTP方法之一,必须全为大写,编码后仍为本身
网址为不带参数的URL,如http://api.twitter.com/1/statuses/home_timeline.xml,必须全为小写,编码后的结果为HTTP%3A%2F%2Fapi.twitter.com%2F1 %2Fstatuses%2Fhome_timeline.xml
参数即此次请求中的除了oauth_signature以外的所有参数,包括一些API所要求的参数,比如在更新自己状态时,需要状态参数。格式为按照[参数名=参数值]的格式中间用&隔开,并且要按照字母顺序升序排列,如果参数名相同,那么按照参数值的字母顺序升序排列。如
oauth_consumer_key = gReNivhwQsHJ8401DYGtAw&oauth_nonce = df563232s&oauth_signature_method = HMAC-SHA1&oauth_timestamp = 1280824014&组oauth_token = 169731880-OzvV2F9vWN2HwztmJi7HAvsOM78pU7Xc2a4sZZX2&oauth_version = 1.0
编码后为
oauth_consumer_key%3DgReNivhwQsHJ8401DYGtAw%26oauth_nonce%3Ddf563232s%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1280824014%26oauth_token%3D169731880-OzvV2F9vWN2HwztmJi7HAvsOM78pU7Xc2dg4ZZX2%26oauth_version%3D1.0
那么将三者再用及组合起来后,即为
GET和HTTP%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fhome_timeline.xml&
oauth_consumer_key%3DgReNivhwQsHJ8401DYGtAw%26oauth_nonce%3Ddf563232s%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1280824014%26oauth_token%3D169731880-OzvV2F9vWN2HwztmJi7HAvsOM78pU7Xc2dg4ZZX2%26oauth_version%3D1.0
注意,这个是1个字符串,上面由于缩进不够,所以换了行。这样,签名串(文本)就构造好了。
7.3.2密钥(键)的构成:oauth_consumer_secret&oauth_token_secret
其中
oauth_consumer_secret即从第三方应用程序获得的。
oauth_token_secret在获取时还没获得,那么即为空,但与得保留;在获取资源时,由于在获取到令牌后获得了未授权的令牌与token_secret,此时就用未授权的token_secret;当获得最终的access_token_secret后,就用获得的最终的access_token_secret,以后也永远用这个,除非重新认证。
这样,密钥(键)就构造好了。
7.4。生成签名 - 签名也要用url encode进行编码
自己用程序实现HMAC-SHA1的加密签名算法。下面给个利用上面的文本/键结果,用HMAC-SHA1算法生成的签名,你也可以通过这个来判断自己的算法正不正确。
文本:
GET和HTTP%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fhome_timeline.xml&
oauth_consumer_key%3DgReNivhwQsHJ8401DYGtAw%26oauth_nonce%3Ddf563232s%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1280824014%26oauth_token%3D169731880-OzvV2F9vWN2HwztmJi7HAvsOM78pU7Xc2dg4ZZX2%26oauth_version%3D1.0
键:
gReNivhwQsHJ8401DYGtAw&0BQFkAcOqYGNgbt0NwoF7w3G9MUlt9AkSJBIwkxoFA
生成的签名:
ITtbuTI901ie4bCFg5vGfb1mCxM =
最后,生成的签名也要用url encode进行编码,编码后的结果为
ITtbuTI901ie4bCFg5vGfb1mCxM%3D
此时再将此字串填充到要发送的HTTP请求中即可。
参考:https://blog.csdn.net/yangjian8915/article/details/11816669