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

php之Twitter第三方登录相关推荐

  1. twitter授权登录 php,PHP版实现Twitter第三方登录的成功案例

    QQ.微信.Fackbook等第三方登录使用OAuth2.0,随便找一些文档跟着做很快实现,没什么难度.等轮到Twitter时候,如果你也这样想,后面它就会证明你是错的! Twitter在当前时间(2 ...

  2. 对接twitter第三方登录踩的坑

    对接twitter第三方登录踩的坑 1.在twitter开发者项目中创建完应用后在应用的Key and tokens中获取到 appkey 然后把获取到的key放入 hello.init({}) 中的 ...

  3. Vue.js中Twitter第三方登录api实现[亲测可用]

    国际化的项目就会用用到一些第三方的登录api,这次记录一下 Twitter 的! 按步骤来: 要注册 Twitter 开发者账号,这个要申请,审核时间要好几天.不过国内的手机注册的几乎都过不了审核.看 ...

  4. Android使用mob实现第三方登录(Facebook、Twitter)

    文章目录 基本配置 1.申请各平台账号,获取各自的key和secret 2.添加依赖 3.添加插件 4.配置MobSdk 5.配置平台 6.mob在项目中的初始化 本文只是做记录和梳理流程,建议到mo ...

  5. 第三方登录 (faceBook )

    1.iOS 第三方登录(Facebook,Twitter...)http://www.jianshu.com/p/f64d5ad2ef2a 转载于:https://www.cnblogs.com/Th ...

  6. Java实现Google第三方登录

    其实所有的第三方登录都是基于OAuth协议的,大多数平台都支持OAuth2.0,只有Twitter的是基于OAuth1.0来做的.所以只要弄明白一个,其他的什么qq.微信.微博的第三方登录也都一样.上 ...

  7. Facebook第三方登录对接

    一.背景调研 1.什么是第三方登录? 第三方登录是基于用户在第三方平台上已有的账号和密码来快速完成己方应用的登录或者注册的功能.而这里的第三方平台,一般是已经拥有大量用户的平台,国外的比如Facebo ...

  8. laravel5实现第三方登录(微信)

    背景 最近手头一个项目需要实现用户在网站的第三方登录(微信和微博),后端框架laravel5.4. 实现过程以微信网页版第三方登录,其他于此类似,在此不做重复. 准备工作 网站应用微信登录是基于OAu ...

  9. 关于第三方登录,你应该知道的

    转载自搜狐网 http://mt.sohu.com/20161101/n471988925.shtml 随着国内及国外巨头们的平台开放战略以及移动互联网的发展,第三方登录已经不是一个陌生的产品设计概念 ...

最新文章

  1. 更换yum的源为阿里云或者网易
  2. Scrum敏捷开发工具分享
  3. SAP QM 通过控制图 (Control Chart) 的实现提升企业质量管理水平
  4. J360-cloud SpringCloud系列二:服务发现Discovery Service
  5. ansible 介绍
  6. 干货 | 算法工程师入门第二期——穆黎森讲增强学习(一)
  7. Ubuntu16.04 下 Python3 虚拟环境安装 OpenCV
  8. IT应聘者的简历应该是怎么样的?
  9. java计算混淆矩阵(分类指标:查准率P,查全率R,P和R的调和均值F1,正确率A)
  10. php写的注册登录系统吗,php注册登录系统简化版_php技巧
  11. 冷热分离和直接使用大数据库_用读写分离与分表分库解决高访问量和大数据量...
  12. 知乎高赞:985计算机视觉毕业后找不到工作怎么办?怒刷leetcode,还是另寻他路?...
  13. Nginx 为什么快到停不下来?
  14. window11在注册表修改用户名后登陆不了账户
  15. ZZULIOJ:1047: 对数表
  16. 将txt文件编码改为utf-8格式
  17. vue 实现简约留言板
  18. 如果我来做个「ZAO」换脸 app,全网最硬核换脸技术简析 (万字长文)
  19. 纯js实现俄罗斯方块详解与源码
  20. 2038年无数Java应用的崩溃

热门文章

  1. 计算机检查磁盘,教你win7系统电脑检测到磁盘错误的解决教程
  2. 聊聊hikari连接池的isAllowPoolSuspension
  3. 【音视频】技术提升2.0
  4. HEVC解码器HM源码阅读(四)解析参数集
  5. python动态仪表图_matplotlib仪表动态更新
  6. Mysql组复制(MGR)——监控
  7. 罗技鼠标正在连接服务器失败,说好的真爱,怎么就翻车了!失败的罗技M720入手记...
  8. WAI-ARIA无障碍网页应用 HTML5 设计辅助功能
  9. RabbitMq(五) -- 死信队列和延迟队列
  10. Lambda表达式到底是什么?——简单了解Lambda表达式