欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

对于oauth2.0的个人理解-客户端篇

Oauth2.0

首先这次咱们来说说常用的安全认证,oauth2.0,对于在客户端调用来说,首先我们要有的一个连接器,连接器包含client_id,client_secret,redirect_uri这三个属性

用来做客户端认证,比如咱们要做一个登录QQ的认证,首先要申请一个连接器获取到 client_id,client_secret,redirect_uri 这三个属性

 

咱们以csdn通过新浪微博登录来举例

 

 

 

我们发现会跳转到新浪微博的登录页,但url却是oauth认证的

https://api.weibo.com/oauth2/authorize?client_id=2601122390&response_type=code&redirect_uri=https%3A....NET%2Faccount%2Flogin%3Foauth_provider%3DSinaWeiboProvider

看咱们都获取到了什么 client_id  response_type redirect_uri

client_id是通过在新浪申请连接器获取的,同时redirect_uri也一样,但还缺少client_secret ,client_secret是在真正获取token的时候才用到,是不对用户暴露的,所以咱们在这里看不到

 

下面咱们继续

response_type  代表了认证的类型

oauth2.0分3种认证类型 咱们用正规oauth2.0的参数名来举例

1.code 

最常用的认证方式,上图中就是code类型,code类型是当我们输入帐号密码登录成功之后,会向redirect_uri中发送code,所以这里登录成功会把请求转发到redirect_uri的链接,这个一般都是咱们自己客户端所在的链接,当我们获取到code,要通过code去获取token

 

咱们在自己的客户端redirect_uri里,调用rest接口,传图中的参数,这里用到了client_secret,我这里为了不暴露就用的假数据,大家别介意哈

这样我们会获得返回的access_token和refresh_token

2.password

password的方式不同于code,code特点是一定要跳到第三方登录页,就像刚刚咱们其实是跳到新浪微博登录的,所以其实还是在新浪登录,不担心被别的网站给拦截

但password这种方式不同

 

上图中password使用的参数,我们看到,这里没有使用redirect_uri 而是直接用了password + 令牌,这种方式是给一个加密令牌,客户端要持有密码和加密令牌,才可以获取,这种方式的好处就是不需要通过第三方页面(比如新浪登录页) 但是这种为什么用的少,因为这样咱们做的客户端就可以获取到他新浪微博的密码了,然后如果咱们给他弄点破坏(坏笑),所以客户很多都不认可这种方式,因为要看客户是否相信咱们做的客户端不会盗用他们的密码

3.refresh_token

refresh_token的特点是刷新token用的

 

在oauth2.0中code获取的token默认都是2小时,超过两小时,就不能用了,如果有人说用code再获取一次,嘿嘿(坏笑)code是一次性的,用过一次就失效了

所以这时候我们要使用refresh_token,当我们用code获取access_token时候也会发给我们一个refresh_token,这个就是用来刷新的,比如咱们调用了新浪微博的接口,这时候

access_token失效了,refresh_token通过接口再重新获取一次access_token和refresh_token,同时旧refresh_token也会失效,因为refresh_token和code一样一次性的,refresh_token时效默认是两个月,但用过一次就失效,就像吃的,保质期是2个月,但吃完了就没了,没吃就还在那(在下是个吃货)

这时候客户端要保留新的refresh_token,用来等access_token再次过期的时候,继续获取

 

 

 

以上就是咱们常用的oauth2.0的认证流程,大家想想,比如支付宝,咱们登录了但登录信息access_token为了安全,2小时就过期,这时候他后台会默认重新获取新的access_token(refresh_token获取)

但咱们长期不登录(比如两个月)refresh_token也过期了,这时候就提示需要咱们重新输入帐号密码(只是打个比喻)

以上针对oauth2.0的只属于个人见解,也许和别人的很不一样,等过多时间我会发一个oauth2.0的服务器端见解,因为在下自己确实搭建过oauth2.0的服务器端,而且已经正式启用,会用来说明服务器里的一些情况

来自 
http://blog.csdn.net/yanghaitian/article/details/53606948

普通分类: