JWT和Oauth认证登录

一:JWT

1.JWT : Json web token,是一款轻量级的用于通信双方信息传递的载体。
官方给出的定义是:基于JSON、在网络间进行通信的令牌。

2.主要有头部,载荷和签名三部分组成。
其中:
头部:存放的是加密算法和令牌形式;
载荷:存放的主要是通信的内容,且不能存放敏感的信息(主要是用户的账号和角色码);
签名:存放头部和载荷以及密钥;

3.加密的算法主要有两种:
①HMSA的对称式加密,具体的就是HS256对称式加密。
HS256加密算法,具体是先对头部和载荷利用base64加密(此加密方式是可以解密的,所以也就是为什么载荷中不能放重要信息,容易被解密)然后用密钥对签名进行解密,并拿着解密后的信息同解密的头和载荷进行信息的校验。能有效的防止其他用户篡改用户信息进行未读伪登录。(密钥是保存在服务器端的)
②RSA非对称式加密,即有公钥和私钥的形式。具体是通过私钥对头和载荷进行加密,然后用公钥作为签名来解密。这样一来,加密和解密用的就不是同一密钥,更能保证通信数据的安全性。

4.之所以用JWT作为存储通信载体的原因有如下优势:
采用json形式容易解析;
可以自定义内容;
有效防止数据被篡改;
不依赖认证服务就能直接完成授权;
当然也有它自身的缺点:如果内容很多,那么经加密后数据很长,存储在浏览器端的cookie中就变得不合时宜。

5.JWT 的json格式:
{
“access_token”: “”, jwt

“refresh_token”: “”,刷新令牌
“expire_time”: “”, 过期时间
“jti”: “”, 短标识
}

6.微服务鉴权的思路流程
当用户在浏览器端发起请求,经网关后有一个自定义的全局过滤器,来判断当前请求(通过lb:):
①是登录请求
②是请求其他微服务;
如果是①,则放行,将其路由到system_service_user微服务进行登录,登录成功后生成一个token(即是jwt),返还至浏览器,将其存储在cookie中;当再次请求时,会在请求的header中以key:value的形式进行携带,首先会在过滤器中进行过滤是否携带了token(也即是jwt),而后对其进行密钥解密,进行信息的校验,和判断当前的token是否过期,如果校验通过则路由到请求服务。
如果是②则需要校验是否携带了token进行解析当前请求的去从。

二:Oauth2
Oauth 是一种认证协议的通用标准,实现跨系统认证。
1.可以实现的功能有:
①.本系统访问第三方系统资源 即是:第三方认证登录
②.外部系统访问本系统资源
③.本系统前端访问本系统后端微服务的资源
④.本系统各个微服务之间相互访问资源。 即是:单点登录

2.单点登录
有CAS单点登录 和 Oauth2的单点登录

3.第三方认证登录
Oauth2最常用的模式主要是 授权码模式 和 密码模式

授权码模式核心是:
先获取到授权码;
基于授权码获取到令牌;
基于令牌获取到受保护的资源信息;
密码模式则不需要获取授权码,直接是使用用户和密码去oauth服务中认证。
ouath2只是一个协议,具体的解决方案是springSecurity Oauth2,springSecutiry 集成了Oauth2协议

4.微服务项目完成用户认证即授权操作
主要基于的技术:spring Security + Oauth2 + JWT(未完待续)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值