twitter三方登录的实现

原创
2017/07/17 11:26
阅读数 1W

twitter的三方登录当时研究了不短时间,也算是第一次做三方登录的东西,将oauth标准彻头彻尾的了解了一下,下面是一些当时总结的资料,参考了很多博文

1.去官网注册账号并在开发者网站创建项目

https://ww.twitter.com

 

https://dev.twitter.com/

创建好的项目

 

2.首先我们开始创建项目

这边有一个坑,如果你的Twitter账号没有绑定手机号,是创建不成功的。需要打开你的登陆账号-设置与隐私,注册手机号,验证短信是浙江嘉兴的,不是骗子!(如图)

项目创建成功后,上开发者官网

https://dev.twitter.com/oauth/reference/post/oauth/request_token

Twitter使用oauth1.0

https://oauth.net/core/1.0/#anchor9

我简单介绍一下:

1.Consumer向Service Provider请求Request Token 
2.Service Provider验证后返回未授权的Request Token 
3.Consumer将User跳转到Service Provider,让其同意授权 
4.Service Provider接到User的授权许可后,将User重定向到Consumer 
5.Consumer在用户跳转回来后拿到已授权的Request Token,再次向Service Provider请求Access Token 
6.Service Provider验证已授权的Request Token,向Consumer提供Access Token 
7.Consumer使用Access Token,访问User的资源 

看着有点儿蒙,其实就是3个url跳转,每个url赋一堆参数,参数类型图上已经给出:

Request token url:参数:

oauth_consumer_key, 就是我们在创建应用时的 Consumer key

oauth_signature_method,Twitter 支持 HMAC-SHA1

oauth_timestamp,//unix时间戳

oauth_nonce,//每次自己随机生成的字符串,能保证每次的都不同就好了

oauth_version,//现在为 1.0

oauth_callback,//创建项目时写的回调地址

oauth_signature,//签名

 

oauth_consumer_key、oauth_callback在我们创建项目时已经生成,随机数和时间戳自己生成,版本号固定为1.0

oauth_signature_method //签名方法,有3种:HMAC-SHA1,RSA-SHA1, PLAINTEXT,由于twitter只支持HMAC-SHA1,故此参数值固定,为HMAC-SHA1

 

重点:oauth_signature

 

Twitter使用的是HMAC-SHA1方法进行签名

 

 签名串(text)的构成:HttpMethod&url&参数。三个红色串必须用urlencode进行编码。编码中的%xx符号,xx中的字母必须为大写,其中HttpMethod为GET/POST/PUT/DELETE等http方法之一,必须全为大写,编码后仍为本身;url为不带参数的url必须全为小写

 

参数即此次请求中的除了oauth_signature以外的所有参数,格式为按照[参数名=参数值]的格式中间用&隔开,按字典排序

 

.密钥(key)的构成:oauth_consumer_secret&oauth_token_secret

oauth_token_secret在第一步时还没获得,那么即为空,但&得保留

 

生成signature – signature也要用url encode进行编码,一些资料说用post需要,get不需要。我都加了

 

例子:

encryptText:

GET&https://twitter.com/oauth/request_token&oauth_consumer_key=7FVlREOKCuQLzukCSSdQdYhbD&oauth_callback=http://localhost:8080/Twitter_sso/index.jsp&oauth_nonce=-1111514832&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1490154283&oauth_version=1.0

encryptKey:

9PIodcMsv71WveGjwNMr3vDnwXWe4HwSE8vUjZZKgchhetHHr3&

signture:

116D418A356618BAD16934AFEF3625CAB3CA38B6

 

 

 

 

这是第一条请求,注意了,这里有坑:

官网生成例子给我们的Request token url是这样的:

各种资料显示也是,但是如果这样写访问不到:

你需要去掉api,直接写Twitter.com 并且在

oauth_signature=116D418A356618BAD16934AFEF3625CAB3CA38B6oauth_timestamp=1490154283

注意这里没有用&关联

下面是正确的例子:

https://twitter.com/oauth/request_token?oauth_consumer_key=7FVlREOKCuQLzukCSSdQdYhbD&oauth_callback=http://localhost:8080/Twitter_sso/index.jsp&oauth_signature_method=HMAC-SHA1&oauth_signature=116D418A356618BAD16934AFEF3625CAB3CA38B6oauth_timestamp=1490154283&oauth_nonce=-1111514832&oauth_version=1.0

成功之后页面得到一个未授权的oauth_token和oauth_token_secret

oauth_token在下一次生成签名时需要添加进去,oauth_token_secret

用于签名生成秘钥时,之前这一步是没有拿到的,留了空。在执行第二个url时需要添加进去

并且在第二步访问url中将oauth_token也作为一个新参数

将第二步请求参数拼接好后输入如下图:

点击授权:

如图,这是又一个坑。概率很大出现空白页,什么都不显示。目前没找到什么问题

如果我们直接将url输入访问是会报错的

如果访问成功,这一步会重定向到你的callbackurl并且url会显示授权之后的oauth_token和一个oauth_verifier(PIN码)

这一步我们在生成签名和访问第三个url时需要把oauth_verifier再添加进去,生成第三个url

例子:

https://api.twitter.com/oauth/access_token?

oauth_consumer_key=7FVlREOKCuQLzukCSSdQdYhbD&

oauth_signature_method=HMAC-SHA1&

oauth_signature=D569EEA2BABD294997F729AD4ADFCCA81DE7B648&

oauth_timestamp=1490105740&

oauth_token=6uQkvwAAAAAAzrh-AAABWvEoiFI&

oauth_nonce=-363810527&

oauth_signature_method=HMAC-SHA1&

oauth_verifier=fTOkmCRNUlRBR5B2vsWDCSgJj5Zc3M1U&

oauth_version=1.0

成功之后页面:

返回一个用户的最终需要的access_token与access_token_secret以及用户信息

整个过程很麻烦,不过直接用sdk会相当简单,在我的另一篇博客里有相关实现

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
打赏
1 评论
0 收藏
0
分享
返回顶部
顶部