OAuth认证原理以及长链变短链(以微博为例)
OAuth(即Open Authorization,开放授权),它是为用户资源授权提供了一种安全简单的标准,也就是说用户在访问第三方web或应用的时候,第三方不会知道用户的信息(登录密码等)。
用户访问客户端的网站,想操作用户存放在服务提供方的资源。
客户端向服务提供方请求一个临时令牌。
服务提供方验证客户端的身份后,授予一个临时令牌。
客户端获得临时令牌后,将用户引导至服务提供方的授权页面请求用户授权。在这个过程中将临时令牌和客户端的回调连接发送给服务提供方。
用户在服务提供方的网页上输入用户名和密码,然后授权该客户端访问所请求的资源。
授权成功后,服务提供方引导用户返回客户端的网页。
客户端根据临时令牌从服务提供方那里获取访问令牌。
服务提供方根据临时令牌和用户的授权情况授予客户端访问令牌。
客户端使用获取的访问令牌访问存放在服务提供方上的受保护的资源。
注:在微博上先申请一个第三方应用,通过后会有AppKey,AppSecret和redirect_uri
1.获取临时token
https://api.weibo.com/oauth2/authorize(POST/GET)
请求参数:client_id 申请时分配的AppKey
redirect_uri 授权回调地址,站外应用需与设置的回调地址一致,站内应用需填写canvas page的地址。
返回参数:code 用于调用oauth2/access_token接口,获取授权后的access token
例子:
https://api.weibo.com/oauth2/authorize?client_id=1&redirect_uri=http://example.com
重定向:http://example.com?code=23456
2.获取凭证access_token
https://api.weibo.com/oauth2/access_token(POST)
请求参数:client_id 申请应用时分配的AppKey
client_secret 申请应用时分配的AppSecret
grant_type 请求的类型,填写authorization_code(即1步骤里的code)
返回参数:{
“access_token”: “ACCESS_TOKEN”,
“expires_in”: 1234,
“uid”:”12341234”
}
例子:https://api.weibo.com/oauth2/access_token
{
client_id: “1”,
client_secret: “2”,
grant_type:”authorization_code”,
code:”23456”,
redirect_uri:”http://example.com”
}
返回:{
“access_token”:”a1”,
“remind_in”:”157679999”,
“uid”:”5”}
注:应用所属开发者授权应用时,有效期为5年
access_token 用户授权的唯一票据,用于调用微博的开放接口,同时也是第三方应用验证微博用户登录的唯一票据,第三方应用应该用该票据和自己应用内的用户建立唯一影射关系,来识别登录状态,不能使用本返回值里的UID字段来做登录识别。
expires_in access_token的生命周期,单位是秒数。
uid 授权用户的UID,本字段只是为了方便开发者,减少一次user/show接口调用而返回的,第三方应用不能用此字段作为用户登录状态的识别,只有access_token才是用户授权的唯一票据。
3.长链变短链
https://api.weibo.com/2/short_url/shorten.json(GET)
参数:access_token url_long
当url_long有几个时,url_long&url_long
例子:
https://api.weibo.com/2/short_url/shorten.json?access_token=a1&url_long=https%3A%2F%2Fs.taobao.com%2Fsearch%3Fq%3D%25E7%25BD%2591%25E7%25BA%25BF%26refpid%3D430267_1006%26source%3Dtbsy%26style%3Dgrid%26tab%3Dall%26pvid%3De9591feb79cbdcc1dd1e878dd9874ee6%26clk1%3D76b8f85a9e0076da672faf02ad7c5399%26spm%3Da21bo.50862.201856-sline.2.tADhc8
返回结果:
{
“urls”: [
{
“url_short”: “http://t.cn/h4DwT1“,
“url_long”: “http://finance.sina.com.cn/“,
“type”: 0,
“result”: “true”
}
]
}