Spring Security Oauth2 JWT

什么是单点登录

  • 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。 SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统

单点登录实现方案

  • 自己平台权限对接
    • 1、Apache Shiro框架
      2、CAS 框架(耶鲁大学的开源项目)
      3、Spring security CAS (spring的开源项目)
  • 第三方平台对接
    • springSecurityOauth2框架
    • 此框架可以对接第三方登录平台,也可以让其他服务对接自己的登录系统
  • 特点:
    • 1、认证系统为独立的系统。
      2、各子系统通过Http或其它协议与认证系统通信,完成用户认证。
      3、用户身份信息存储在Redis集群。

Jwt是什么以及作用

  • 组成 : 头部 + 载体 + 签名(编码+加密) = jwt
  • 公钥和私钥生成(采用非堆成加密 , 生成密钥证书 下边命令生成密钥证书,采用RSA 算法每个证书包含公钥和私钥 )
keytool -genkeypair -alias changgou -keyalg RSA -keypass changgou -keystore changgou.jks -storepass changgou 

Keytool 是一个java提供的证书管理工具

-alias:密钥的别名 
-keyalg:使用的hash算法 
-keypass:密钥的访问密码 
-keystore:密钥库文件名,changgou.jks保存了生成的证书 
-storepass:密钥库的访问密码 

查询证书信息:

keytool -list -keystore changgou.jks

导出公钥

openssl是一个加解密工具包,这里使用openssl来导出公钥信息。
安装 openssl:http://slproweb.com/products/Win32OpenSSL.html

配置openssl的path环境变量
cmd进入changgou.jks文件所在目录执行如下命令:

keytool -list -rfc --keystore changgou.jks | openssl x509 -inform pem -pubkey

加密算法

  • 可你加密(加密后可以解密)
    • 对称加密(同一把钥匙加密解密,安全性较低)
    • 非对称加密(私钥加密,公钥解密,安全性较高)
  • 不可逆加密(加密后不能进行解密)
    • 例如:MD5

什么是oauth2

  • oauth2是一个协议,是一个互联网上关于授权鉴权的标准流程协议,如果我们都按照这个协议去开发我们的权限系统,可以相互对接

oauth2四种认证模式

  • 授权码模式(Authorization Code):可以第三方授权(比较难)
  • 隐私授权模式(Implicit)只要页面,没有后端的情况下使用(一般是前端使用)
  • 密码模式(Resource Owner Password Credentials):系统内部授权使用(说白了,就是自己公司使用,不进行对接)

第三方登录技术认证流程

  • 授权流程图:
    在这里插入图片描述
    在这里插入图片描述
    • 与第三方登录对接需要签署专门协议
    • 携带着协议中对应的参数去访问资源拥有者服务器
    • 资源拥有者验证成功返回授权码
    • 客户端携带授权码,消费地址,访问认证服务器,返回登录页面
    • 消费者输入用户名密码进行登录
    • 返回token
    • 客户端携带token访问资源服务器获取用户头像等信息
    • 返回用户的基本信息
  • 客户端模式(Client Credentials): 需要完全信任客户端, 最简单的授权模式, 最不安全, 一般不用.

畅购认证的解决方案

在这里插入图片描述

授权鉴权流程

  • 授权流程
  • 消费者发送请求访问网关, 刚开始没登陆, 网关将请求重定向到认证系统changgou-user-oauth
  • 认证系统中有登录页面, 消费者看到登录页面输入用户名密码, 认证系统通过feign远程调用changgou_service_user用户系统, 校验用户名密码是否正确, 不正确, 重定向到登录页面重新登录
  • 如果正确, 将获取到的jti短令牌作为key, jwt长令牌作为value存入redis中保存
  • 并且将jti短令牌放到用户浏览器cookie中保存, 授权流程完成

授权&鉴权描述总结:

  • 我们做的权限主要分为两大步骤,一个是授权,一个是鉴权,用户在访问服务器资源时,都会通过一个网关微服务,进行鉴权,没有权限重定向到登录页面进行授权保存jti到cookie,有权限,从cookie中取出jti短令牌通过短令牌从redis中获取对应的jwt,将jwt设置在请求头放行.在各个业务系统中进行解析jwt,能成功解析就能访问资源,不能解析让他登录. (技术: spring oauth2协议 spring security , 非对称加密算法 redis等 )
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值