http认证鉴权04跨域SSO之OAuth2入门

OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全、开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息。
OAuth在”客户端”与”服务提供商”之间,设置了一个授权层,”客户端”不能直接登录”服务提供商”,只能登录授权层,以此将用户与客户端区分开 来,”客户端”登录授权层是使用令牌(token),”客户端”登录授权层以后,”服务提供商”根据令牌的权限范围和有效期,向”客户端”开放用户储存的资料

实现机制(授权码)

在OAuth2的授权机制中有4个核心对象

1
2
3
4
(1)Resource Owner(资源拥有者:用户)  
(2)Client (第三方接入平台:请求者,例如网站)
(3)Resource Server (资源服务器,存储例如用户信息等资源)
(4)Authorization Server (认证服务器)

步骤:

1
2
3
4
5
6
7
(1)用户在第三方应用上点击登录,应用向认证服务器发送请求,说有用户希望进行授权操作,同时说明自己是谁、用户授权完成后的回调url  
(2)认证服务器展示给用户自己的授权界面
(3)用户进行授权操作,认证服务器验证成功后,生成一个授权编码code,并跳转到第三方的回调url
(4)第三方应用拿到code后,连同自己在平台上的身份信息(ID密码)发送给认证服务器,再一次进行验证请求,说明自己的身份正确,并且用户也已经授权我了,来换取访问用户资源的权限
(5)认证服务器对请求信息进行验证,如果没问题,就生成访问资源服务器的令牌access_token,交给第三方应用
(6)第三方应用使用access_token向资源服务器请求资源
(7)资源服务器验证access_token成功后返回响应资源

隐式授权模式/简化模式

和授权码模式类似,只不过少了获取code的步骤,是直接获取令牌token的,适用于公开的浏览器单页应用,令牌直接从授权服务器返回,不支持刷新令牌,且没有code安全保证,令牌容易因为被拦截窃听而泄露。

密码模式

使用用户名/密码作为授权方式从授权服务器上获取令牌,一般不支持刷新令牌。

客户端凭证模式

一般用于资源服务器是应用的一个后端模块,客户端向认证服务器验证身份来获取令牌。

为什么先获取code,再用code去获取access token

oauth2在获取access_token之前,一定要先获取code,主要是因为安全原因
01,code需要设置过期时间,一般设置的过期时间非常短,如10分钟等,用户需要在短时间内通过code换取access_token,避免code被第三方拦截。当然,即便这种情况会发生,但因为code的过期时间非常短,也在一定程度上进行了保护,但这肯定不是完全安全的
02,授权成功后,code是会直接显示在浏览器上的,如果不通过code换取access_token,而是直接返回access_token,那access_token会被暴露出来,而code换取access_token是直接通过oauth服务器进行换取的,不依赖浏览器,access_token不会暴露出去。
前提是,你先在oauth服务器上进行了注册,得到了client_id和app_secret,请求时,不仅需要发送code,还需要发送client_id,oauth服务器会对client_id进行判断,是否已经进行了注册
当然,OAuth2还是允许直接返回access_token,而不经过code换取.oauth2一共有四种模式,有一种就是直接返回access_token的

参考

OAuth2认证原理:https://blog.csdn.net/fsy9595887/article/details/85114508
OAuth2实现原理:https://www.cnblogs.com/chinanetwind/articles/9457842.html
OAuth2.0认证原理浅析:https://blog.csdn.net/tclzsn7456/article/details/79550249
CAS与OAuth2的区别:https://www.cnblogs.com/boboooo/p/9041355.html
理解OAuth 2.0:https://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
身份认证系统OAuth2的四种模式:https://www.jianshu.com/p/90c8c75e3aad
为什么OAuth2里面在获取access token之前一定要先获取code,然后再用code去获取access token:https://www.cnblogs.com/askfb/p/11027366.html

认证鉴权系列
http认证鉴权01基本认证和摘要认证
http认证鉴权02同域SSO
http认证鉴权03跨域SSO之CAS
http认证鉴权04跨域SSO之OAuth2入门
http认证鉴权05CAS和OAuth2区别
http认证鉴权06CSRF跨站请求伪造

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×