【spring Security】Security、oauth、JWT关系梳理

Security

Security是spring提供的一个高度自定义的安全框架,为系统提供了安全访问控制功能。简化了认证授权及系统安全管理。

Security使用了责任链的设计模式,他提供了一个非常长的过滤器链完成完成认证、授权、鉴权的相关操作。

oauth

oauth是一套关于认证授权的协议,是一种规范,spring-security-oauth是对oauth规范的一种实现。

oauth保证了访问资源的安全性以及灵活性。他允许用户不把某系统的账号密码提供给第三方,第三方就能访问到此用户该系统上的信息,使第三方应用可以更安全的访问资源。

oauth流程

oauth在 客户端 与 资源服务 之间设置了一个 授权层 。使客户端不能直接访问 资源服务 ,而需要 客户端 经过用户同意授权之后在授权层拿到令牌token,使用token访问 资源服务 。授权层在颁发token的时候可以指定token的授权范围以及有效时间。使用token只能访问规定的范围内的资源。

流程图:

【spring Security】Security、oauth、JWT关系梳理

(A)客户端请求用户授权

(B)用户同意客户端的授权请求

(C)客户端使用用户授权请求 授权服务器

(D)授权服务器延华智能成功之后颁发令牌 access token

(E)客户端使用 access token 请求资源服务

(F)资源服务器校验token做出响应

对于客户端的授权流程oauth2.0定义了四种授权模式

    • 授权码模式
    • 隐式模式
    • 密码模式
    • 客户端模式

授权码模式

授权码模式是最严密最复杂最安全的授权模式。

【spring Security】Security、oauth、JWT关系梳理

前提:

需要在授权服务器上提前定义好客户端的 客户端ID(client_id) 、 客户端秘钥(client_secret)、回调地址(redirect_uri)、客户端的授权模式、作用域、资源ID等。

2、客户端请求授权服务器授权时需要携带client_id、client_secret、response_type http://localhost:8080/oauth/authorize?client_id=c123456&client_secret=c123456&response_type=code

3、授权服务器返回登录页让用户登录,登录成功返回授权页,让用户给客户端授权

5、用户给与授权之后,授权服务器调用回调地址,返回授权码 http://localhost:9001/callback?code=j0vvGf

6、客户端使用授权码换取token,http://localhost:8080/oauth/token 【spring Security】Security、oauth、JWT关系梳理

token校验有两种方式:1、配置授权服务器的token校验的端口,2、配置和授权服务器一样的TokenStore

隐式模式

用户登录授权服务器并对客户端授权,授权服务器直接返回token,省略了授权码的过程。

【spring Security】Security、oauth、JWT关系梳理

前提:

需要在授权服务器上提前定义好客户端的 客户端ID(client_id) 、 客户端秘钥(client_secret)、回调地址(redirect_uri)、客户端的授权模式、作用域、资源ID等。

2、客户端请求授权服务器授权时需要携带client_id、response_type

http://localhost:8080/oauth/authorize?client_id=client-a&response_type=token

3、授权服务器返回登录页让用户登录,登录成功返回授权页,让用户给客户端授权

5、用户给与授权之后,授权服务器调用回调地址,返回token

http://localhost:9001/callback#access_token=ede88421-5703-4365-a72e-b5f0b6101704&token_type=bearer&expires_in=42841&scope=all

token校验有两种方式:1、配置授权服务器的token校验的端口,2、配置和授权服务器一样的TokenStore

密码模式

密码模式中需要用户提供自己的账号密码给客户端,客户端使用用户的账号密码和client_id client_secret去授权服务器请求token

【spring Security】Security、oauth、JWT关系梳理

客户端模式

客户端以自己的名义,而不是以用户的名义 去授权服务器申请token

【spring Security】Security、oauth、JWT关系梳理

这个模式中用户不需要和授权服务器有什么联系,只需要和客户端做交互。

JWT

  • 是基于token的认证流程的具体实现
  • 主要用来生成token,验证token是否过期以及获取用户信息

总结

oauth2.0是规范,使用时是引入了oauth2.0的规范。

JWT是token的实现,做token的生成以及校验。

Security本身是一套完整的认证和授权解决方案,他是一条很长的过滤器链,使用oauth和JWT需要在过滤器链中定义oauth和JW他的具体实现。

前后端分离的系统,只需要实现token,做token的颁发和校验。JWT是token的一种实现方式。

系统需要给第三方系统做授权,就需要实现oauth。

JWT对token的实现可以通过解密获取用户信息以及权限信息,简化oauth的校验流程。

参考:

oauth授权流程以及实现

https://www.cnblogs.com/hellxz/p/oauth2_process.html

springboot-安全认证security+jwt+OAuth2.0关系梳理

https://blog.csdn.net/shishuai4206/article/details/111504155

上一篇:处理其他系统过来的token.


下一篇:Java JWT认证