认证和鉴权硬盘马达
SpringCloud认证和鉴权⽅案
开始我们接触的时候权限认证 ⽆从下⼿,但是当接触之后会发现 权限认证时⼀件很简单的事情,但是我们 ⽅案众多⼜该如何选择呢,下⾯会分别对每种⽅案进⾏简单的阐述,有问题或者不明⽩的可以私信或者下⽅留⾔,⼀起讨论
含义
认证:简单来说,认证这个⽤户是谁。
鉴权:简单来说,就是了解这个⽤户能做什么事情
本篇章介绍如下⼏种⽅式
1.单体应⽤下的常⽤⽅案
3.分布式Session与⽹关结合⽅案
4.客户端Token与 ⽹关结合⽅案
5.浏览器Cookie与⽹关结合⽅案
6.⽹关Token和 服务间鉴权结合
(还有狠多,不再⼀⼀列举)
yig滤波器
7.简单案例讲解
详细介绍
1.单体应⽤下的常⽤⽅案
传统的单体应⽤,⼀般会写⼀个固定的认证和鉴权的包,⾥⾯包含很多的认证和鉴权的类,当⽤户请求时可以利⽤session的⽅式,把⽤户存⼊session并⽣成⼀个sessionid,之后返回客户端。客户端可以存在cookie⾥,从⽽在后续的请求中顺利通过验证。 常⽤框架:shiro 、⾃定义注解、Filter拦截等
2. 微服务下的SSO单点登陆⽅案
单点登录(Single Sign On),简称为 SSO,是⽬前⽐较流⾏的企业业务 整合的解决⽅案之⼀。SSO的定义是在多个应⽤系统中,⽤户只需要登录⼀次就可以访问所有相互信任的应⽤系统,如CAS(Central Authentication Service),是耶鲁⼤学开发的单点登录系统 地沟油提炼生物柴油(SSO,single sign-on),应⽤⼴泛,具有独⽴于平台的,易于理解,⽀持代理功能。
但是针对微服务(服务之间调⽤):每个 服务都进⾏每个⽤户端 的sso动作,那么每个服务⾥都会做⽤户的认证和鉴权,可能保存每个⽤户的信息或者每个⽤户都会和鉴权服务打交道,这些情况都会带来⾮常⼤的⽹路开销和性能消耗,也有可能会造成数据的不⼀致,所以不建议⽤这种⽅案。
3.分布式Session与⽹关结合⽅案
1)⽤户在⽹关进⾏sso登陆 ,进⾏⽤户认证,检查⽤户是否存在和有效
2)如何⽤户通过,则将⽤户信息存储在第三⽅中间件中,如mysql、redis
3)后端可以从共享存储拿到⽤户的数据
很多 场景下,这种⽅案是推荐的,因为⽅便扩展,也 可以保证⾼可⽤的⽅案。但是这种⽅案的缺点是依赖于第三⽅中间件,且这些部件需要 做⾼可⽤,并且增加安全的控制,所有对于实现有⼀定的复杂度
4.客户端Token与 ⽹关结合⽅案
实现步骤
1)客户端持有⼀个token,通常可⽤jwt或者其它加密的算法实现⾃⼰的⼀种Token,然后通过token保存⽤户的信息
2)发起⽤户请求并携带token,token传到⽹关层后,⽹关 层进⾏认证和校验。
3)校验通过,携带token到后端服务中
4)如果涉及到⽤户的⼤量信息存放,token就有可能不太合适(或者⽤中间件来存放)液氨化工厂制备
这种⽅案也是业界很常⽤的⽅案,但是对于 token来说,他的注销有⼀定的⿇烦,需要在⽹关层进⾏Token的注销
5. 浏览器Cookie与⽹关结合⽅案
这种⽅式和上⾯的⽅式类似,但不同的是我们把⽤户的信息存放在cookie⾥,然后通过⽹关来解析cookie,从⽽ 获取⽤户的相关信息,这种⽅式在⼀些⽼系统做改造时遇到的⽐较多,适合做为⽼系统改造时采取的⽅案,因为很多系统需要继承,这时cookie在别的系统中也是同样的适⽤。
6. ⽹关Token和 服务间鉴权结合
我们都知道⽹关适合做认证和鉴权,但是在安全层⾯,我们要求更严格的权限,对于有些项⽬来说,本⾝⽹络跟外部隔离,再加上其它的安全⼿段,所以我们只要求在⽹关上鉴权就可以了。
但是有些时候服务对 服务之间的调⽤进⾏鉴权,知道某个⽤户是否有权限调⽤某个接⼝,这些都需要进⾏鉴权。
这时的⽅案如下。
1)在gateway⽹关层做认证,通过⽤户校验后,传递⽤户信息到header中,后台做服务在收到header后进⾏解析,解析完后查看是否有调⽤此服务或者某个url的权限,然后完成鉴权
2)从服务内部发出的请求,在出去时进⾏拦截,把⽤户信息保存在header⾥,然后传出去,被调⽤⽅取到header后进⾏解析和鉴权
7.略
生殖器疱疹新药
⽂字⽐较多 ,会在分⼀篇张阐述
竞赛抢答器
End