网关与微服务间鉴权的疑惑

203 天前
 MoonWalker

最佳实践是什么

2657 次点击
所在节点    Java
17 条回复
crazycoding
203 天前
1.网关登录保留用户登录信息,返回 token
2.前端携带 token ,网关层校验 token ,网关层配置默认携带 token header 到各个微服务,各个微服务 filter 解析 token ,保存到 threadlocal ,用于各个微服务上下文获取登录信息
MoonWalker
203 天前
@crazycoding 嗯你说的是正常从网关走到微服务的,我的意思是说如何避免直接绕过网关到微服务
ChevalierLxc
203 天前
@MoonWalker 你都是网关了,外网就不应该直接能访问到你的微服务,微服务之间的调用,应该有 service secret 的东西调用,外网的 request 无法直接调用微服务。
zuixinwenyue
203 天前
除了网关流量 其它的全部禁掉就好了,一般也不能直接请求微服务,暴露的应该是网关。
ny562kPWNJK9g86f
203 天前
不知道现在外部与网关是怎样鉴权的,当网关鉴权成功后,生成用户 token 通过 head 下发,在内网中各个服务应该是信任的。
如果确实不信任,或者是敏感业务,可以要求网关生成 jwt token ,各个服务直接从里面获取用户信息,不需要回查其它服务。
如果整个链路从外到内,都是 jwt token ,那就全部透传即可。
retanoj
203 天前
@MoonWalker 网关和微服务之间也做认证
比如服务注册时候派发证书,调用时建立 mTLS 通道
或者服务注册时候派发 JWT ,调用校验
buruoyanyang
203 天前
我理解是网关后面的服务应该只能被网关和内部服务调用,可以通过防火墙实现。目前我们是通过 gateway 鉴权的请求都会把 token 解析成对应的用户信息,通过 header 或者其他方式向后续的服务传递。
GeekGao
203 天前
一般而言,是通过 mTLS ,Dapr 的实践是这样的。
GeekGao
203 天前
例子:
Dapr 通过 mTLS 确保 Dapr sidecar 与 Dapr 控制平面系统服务之间的通信安全。当启用 mTLS 时,Sentry 服务(证书颁发机构)将根证书和颁发者证书写入 Kubernetes secret (在 Kubernetes 模式下)或配置的文件系统路径(在自托管模式下)。在 Kubernetes 中,Dapr 系统服务启动时,它们会自动挂载包含根证书和颁发者证书的 secret ,并使用这些证书来保护 Dapr sidecar 使用的 gRPC 服务器。在自托管模式下,每个系统服务可以挂载到文件系统路径以获取凭据。当 Dapr sidecar 初始化时,它会使用挂载的叶证书和颁发者私钥向系统 pods 进行身份验证,这些叶证书和私钥作为环境变量挂载在 sidecar 容器上
9c04C5dO01Sw5DNL
203 天前
所有请求走网关,网关转发到鉴权(含认证)服务,鉴权通过后返回用户基本信息给网关,网关将用户基本信息塞进 header 传递给内部服务。

认证鉴权服务也可以塞到网关服务中。。。
crysislinux
203 天前
我感觉楼主想问的是网关和微服务之间以及多个微服务之间的通讯需不需要 authentication 吧。。我倾向于不做任何 authentication ,微服务都在一个 VPC 里,然后只有网关能访问这个 VPC ,微服务也只能被 VPC 内部别的微服务访问。
zjyl1994
203 天前
我公司的环境是统一 gateway 鉴权,然后内网调用直接 grpc ,没有额外的校验。如果是金融性的重点接口才会自行约定一套签名方案让接入方实现,其他的都没有保护。所有服务的访问都必须经过 gateway ,无法直接连接到服务上。应该是做了网络隔离的。
seedhk
202 天前
方案 2
所有流量都走网关过,网关调研内部服务时携带用户信息
limyel
202 天前
避免请求绕过网关那个,可以借鉴 sa-token 的做法,请求经过网关的时候在请求头和 redis 里面塞一个值,然后服务端校验请求头的值和 redis 是否同一个,不是就返回异常。
S4msara
202 天前
1. RequestInterceptor 把 Token 传递到下游程序之后,下游程序如果需要用户信息,可以解析 Token 获取用户基本信息,也可与再调用用户服务拿到完整用户对象;
2. 用户认证通过后,把 Token 和用户信息放到 Redis ,下游服务连接相同 Redis 实例或副本,拿到 Token 之后到 Redis 取用户信息,用 ThreadLocal 存一份,随取随用。
loveing
202 天前
微服务之间都是“裸“奔的,无认证,无鉴权。
MoonWalker
202 天前
最终: 花了一天时间改造成了下游服务采用双向的 TLS , 微服务加载需要的证书来调用下游。踩了好多坑,资料有点偏少...终归还是实现了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1038123

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX