SpringSecurity +oauth2+JWT实现统一授权和认证(一)

一 SpringSecurity 简单介绍

Spring Security 是强大的且容易定制的,基于 Spring 开发的实现认证登录与资源授权的应用安全框架

核心功能

  • Authentication:身份认证,用户登陆的验证

  • Authorization:访问授权,授权系统资源的访问权限。安全防护,防止跨站请求,session 攻击等,如用户菜单权限等

主要配置类

a configure(HttpSecurity httpSecurity)

用于配置需要拦截的 url 路径、jwt 过滤器及出异常后的处理器

b configure(AuthenticationManagerBuilder auth)

用于配置 UserDetailsServicePasswordEncoder

c RestfulAccessDeniedHandler

当用户没有访问权限时的处理器,用于返回 JSON 格式的处理结果

d RestAuthenticationEntryPoint

当未登录或 token 失效时,返回 JSON 格式的结果

e UserDetailsService

SpringSecurity 定义的核心接口,用于根据用户名获取用户信息,需要自行实现

f UserDetails

SpringSecurity 定义用于封装用户信息的类(主要是用户信息和权限),需要自行实现

g PasswordEncoder

SpringSecurity 定义的用于对密码进行编码及比对的接口,目前使用的是 BCryptPasswordEncoder

h JwtAuthenticationTokenFilter

在用户名和密码校验前添加的过滤器,如果有 jwt 的 token,会自行根据 token 信息进行登录

二 oauth2介绍

OAuth是一个开放标准,也就是一个授权框架,使应用程序能够访问其它公司提供的资源,允许用户在第三方应用访问存储在其他服务器上的私密资源,而在整个过程不需要提供用户名和密码给到第三方应用,可以通过提供一个令牌(token)实现该功能,采用令牌的方式可以让用户灵活的对第三方应用授权或收回权限。OAuth2.0是OAuth协议的延续版本,但不兼容OAuth 1.0,即完全废止了OAuth1.0。

oauth2的角色:

1.资源所有者(Resource Owner):即代表用户本身

2.资源服务器(Resource Server):存储受保护的账号信息

3.授权服务器(Authorization Server):在成功验证用户身份,并获得授权后,给客户端派发访问资源令牌

4.客户端(Client):即代表你访问的第三方应用

认证流程:

oauth2的四种授权模式:

1 授权码模式

授权码模式(authorization code)是功能最完整、流程最严密的授权模式。同时也是安全性最高,它适用于那些有后端的 Web 应用。授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完成。可以避免令牌泄漏。

流程步骤如下:

1:用户访问页面

2:访问的页面将请求重定向到认证服务器

3:认证服务器向用户展示授权页面,等待用户授权

4:用户授权,认证服务器生成一个code和带上client_id发送给应用服务器,然后,应用服务器拿到code,并用client_id去后台查询对应的client_secret

5:将code、client_id、client_secret传给认证服务器换取access_token和refresh_token

6:将access_token和refresh_token传给应用服务器

7:验证token,访问真正的资源页面

2 密码模式

密码模式(Resource Owner Password Credentials Grant)中,用户向客户端提供自己的用户名和密码。客户端使用这些信息,向"服务商提供商"索要授权。在这种模式中,用户必须把自己的密码给客户端,但是客户端不得储存密码。这通常用在用户对客户端高度信任的情况下。一般不支持refresh token。

步骤如下:

  • 用户向客户端提供用户名和密码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天雨编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值