xAuth
XAuth也是一种OAuth的认证方法
结构和流程上看XAuth是一种oauth1.0和oauth2.0的集合者
oauth2.0的access_token接口步骤 + oauth1.0的签名方法
为什么出现XAuth?
现在需求是:
1 不希望有oauth1.0的三步复杂的认证流程,希望直接使用用户名和密码就可以完成(这对于移动设备的第三方应用非常需要)
2 不希望取得access_token之后使用https来调用接口
3 当然最总要紧的是还要保证数据的安全性
那么就有一种方法:
XAuth
特别说明:
1 xauth最早是twitter使用的,很多人都认为是由twitter开发的xauth,后在国内的网站weibo也使用了
2 xauth没有正式成为ietf推广的方案
3 xauth应该是在oauth1.0出现推广之后,oauth2.0出现之前这个阶段出现的产物
4 twitter和weibo并不是允许所有的应用都可以使用xauth,都要求第三方需要向网站提交申请,主要考虑到xauth的安全性和流程确实不如oauth可靠
5 xauth主要适用于非server的第三方
6 xauth的客户端实现可以直接使用oauth1.0的实现,服务器端的实现也只是需要在access_token的接口中多增加一个分支,因此对应于实现了oauth1.0开发的第三方应用和网站来说是非常容易实现的
XAuth的步骤
XAuth的步骤非常简便(twitter为例):
1 客户端https请求access_token
https://api.twitter.com/oauth/access_token
oauth_consumer_key - JvyS7DO2qd6NNTsXJ4E7zA //appkey,应用申请时候获得
oauth_consumer_secret - 9z6157pUbOBqtbm0A0q4r29Y2EYzIHlUwbF4Cl9c //secrect 应用申请时获得
oauth_nonce - 6AN2dKRzxyGhmIXUKSmp1JcB4pckM8rD3frKMTmVAo //防重放唯一数
oauth_signature_method - HMAC-SHA1 //加密算法
oauth_timestamp – 1284565601//时间戳
oauth_version - 1.0 //oauth版本
x_auth_mode - client_auth //xauth的标志
x_auth_password - twitter //用户密码
x_auth_username – testuser //用户名
注:其中的签名方法是和oauth1.0一样的,所以客户端的实现可以直接使用各大网站oauth1.0已有的框架和SDK(我认为这是导致xauth出现的原因之一)
这步和oauth2.0的username-password一样,但是签名和参数设置又是和oauth1.0一样
2 服务器端接收到xauth请求
a 使用oauth1.0的签名方式验证
b 验证用户名和密码
c 生成access_token,和secret
d 直接将access_token和secrect返回给客户端
3 客户端得到access_token和secret后直接使用oauth1.0的流程请求接口
参考资料:
http://open.weibo.com/wiki/XAuth
https://dev.twitter.com/docs/oauth/xauth
http://yourhead.tumblr.com/post/428643811/five-things-you-didnt-know-about-xauth
http://aralbalkan.com/3057
http://xauth.org/spec/
作者:yjf512(轩脉刃)
出处:http://www.cnblogs.com/yjf512/
本文版权归yjf512和cnBlog共有,欢迎转载,但未经作者同意必须保留此段声明