Spring Security Oauth2(面试有被问到)
Spring Security Oauth2
OAuth专门用来解决面向互联网的复杂权限验证功能。
很多平台的登录都使用到了OAuth 2.0的登录协议。
我们以百度为例,可以看到百度有多种登录方式,最常见的是以用户名和密码进行登录,除此之外,还有通过QQ,微信、新浪微博等方式来进行登录。也就是说当你使用微信或者是QQ来进行登录的时候,这个时候就会使用到oauth 2.0的协议,来和微信或者是QQ进行对接。

从上面的流程图中,微信只是做了一个响应用户信息的事情。
oauth 2.0协议主要解决的问题是三方交互不信任的问题。
spring security框架中自己封装了一套oauth 2.0协议。
在 Spring OAuth2 中,核心是通过不同的授权模式(Grant types)实现客户端对资源服务器的访问授权,面试中常考的有 4 种主要模式,每种模式适用于不同场景,特点如下:
客户端模式client_credentials

密码模式Password

隐性模式implicit

这种模式的流程是:access_token不是直接发送给客户,⽽是需要客户去⼀个指定的窗⼝进⾏预约。预约完成后,电影院不直接发⻔票,⽽是将⻔票直接发到客户所在的公司。
授权码模式authorization_code

还是以看电影为例,与上⾯简单模式的区别在于,电影院向公司投送的,不是直接的⻔票,⽽是⼀个兑换码。⽤户从公司拿到兑换码后,再去电影院兑换⻔票。
这种模式下,就算⽹络上传递的code被别⼈抓包获取了,也并不能直接拿到access_token。这也是⾯向互联⽹构建开放权限体系的标准流程。微信开放平台就明确指出微信登录只⽀持这种authorizatino_code模式。
另外,相⽐于简化模式,code和access_token都是以请求参数的形式,通过后台服务器进⾏交互,这样进⼀步减少了令牌泄露的⻛险。但是相应的,对接⼊⽅的技术要求也相对较⾼,需要构建对应的后台服务。
浙公网安备 33010602011771号