Spring Security Oauth2(面试有被问到)

Spring Security Oauth2

OAuth专门用来解决面向互联网的复杂权限验证功能。

很多平台的登录都使用到了OAuth 2.0的登录协议。

我们以百度为例,可以看到百度有多种登录方式,最常见的是以用户名和密码进行登录,除此之外,还有通过QQ,微信、新浪微博等方式来进行登录。也就是说当你使用微信或者是QQ来进行登录的时候,这个时候就会使用到oauth 2.0的协议,来和微信或者是QQ进行对接。

image-20250815090629143

从上面的流程图中,微信只是做了一个响应用户信息的事情。

oauth 2.0协议主要解决的问题是三方交互不信任的问题。

spring security框架中自己封装了一套oauth 2.0协议。

在 Spring OAuth2 中,核心是通过不同的授权模式(Grant types)实现客户端对资源服务器的访问授权,面试中常考的有 4 种主要模式,每种模式适用于不同场景,特点如下:

客户端模式client_credentials

image-20250815092532966

密码模式Password

image-20250815092930346

隐性模式implicit

image-20250815112837774

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

授权码模式authorization_code

image-20250815113528302

还是以看电影为例,与上⾯简单模式的区别在于,电影院向公司投送的,不是直接的⻔票,⽽是⼀个兑换码。⽤户从公司拿到兑换码后,再去电影院兑换⻔票。

这种模式下,就算⽹络上传递的code被别⼈抓包获取了,也并不能直接拿到access_token。这也是⾯向互联⽹构建开放权限体系的标准流程。微信开放平台就明确指出微信登录只⽀持这种authorizatino_code模式。

另外,相⽐于简化模式,code和access_token都是以请求参数的形式,通过后台服务器进⾏交互,这样进⼀步减少了令牌泄露的⻛险。但是相应的,对接⼊⽅的技术要求也相对较⾼,需要构建对应的后台服务。

posted on 2025-08-15 11:41  ~码铃薯~  阅读(45)  评论(0)    收藏  举报

导航