OAuth2.0简单说就是一种授权的协议,OAuth2.0在客户端与服务提供商之间,设置了一个授权层(authorization layer)。客户端不能直接登录服务提供商,只能登录授权层,以此将用户与客户端区分开来。然后客户端在登录时候不使用账号密码,而是使用会自动过期的令牌token
定义比较难理解,可以举个例子,假如我们要登录豆瓣网,可以你是没账号的,又不想注册,然后这时候可以用QQ登录,登录时候会转跳到QQ登录页面,这个就是QQ就是一个认证服务器,豆瓣是服务提供商,也可以说是资源服务器
-
(A)打开客户端,重定向,请求给予授权。
-
(B)用户开始给予客户端授权
-
(C)客户端使用获得的授权,向认证服务器申请令牌。
-
(D)客户端拿授权码去认证服务器认证,确认提供同意发放令牌。
-
(E)认证通过,客户端使用令牌,向资源服务器申请获取资源。
-
(F)资源服务器确认令牌无误,同意向客户端开放资源。
OAuth2.0授权方式:
- 授权码模式(authorization code)
- 简化模式(implicit)
- 密码模式(resource owner password credentials)
- 客户端模式(client credentials)
一般认证授权过程需要的参数:
- response_type:授权类型,必选项
- client_id:客户端的ID,必选项
- redirect_uri:重定向URI,可选项
- scope:申请的权限范围,可选项
- state:客户端的当前状态,可以指定任意值,认证服务器会原封不动地返回这个值
其实总结一下,Oauth2.0用授权码方式,无非就是用户访问客户端就直接重定向到认证服务器,然后输入账号密码等等通过验证后,认证服务器会重定向到redirect_uri并将授权码附在url上,然后再拿授权码去认证,认证通过发放令牌,登录成功
参考资料:
http://www.rfcreader.com/#rfc6749_line1019
http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
网友评论