作者回复: 事先约定传递http header进行鉴权是一种简单方式。其它更严格的方式有:1). ip白名单方式,服务器端通过过滤器filter校验客户端ip是否在授权范围内。2). 运维网段隔离,通过运维手段隔离网段,例如支付服务在独立隔离生产网段内,且只有白名单内ip可以访问。3). 通过内部反向代理集中鉴权,服务之间调用必须经过内部反向代理(例如nginx),然后在nginx上配授权规则。4). 通过ServiceMesh实现服务授权,可以实现细粒度的流量权限控制。
作者回复: 服务之间调用可以经过集中的代理或网关,这样方便做一些集中安全和监控治理,但是有多一跳性能问题和单点问题(代理或网关挂);也可以不经过集中代理或网关,而是直连,这样性能更好,但是不容易做集中治理,这时候一般需要通过客户端做负载均衡和监控/日志数据埋点,阿里dubbo是直连的典型服务框架。实践中,两种方案都有成功落地案例。现代k8s + istio service mesh方案,本质上是通过代理进行集中治理的。
作者回复: 透明化处理需要底层网络支持,可以考虑servicemesh。
作者回复: 看这里: https://istio.io/latest/docs/concepts/security/ 另外,我的新课《分布式系统案例课》,也会讲到ServiceMesh/istio这块,欢迎关注。
作者回复: 和用户关联就和业务耦合了,必然需要在框架/业务层引入复杂性。 目前比较干净的非侵入和业务无关的做法一般需要运维网络层支持,ServieMesh可以做到服务细粒度权限控制,可以尝试。
作者回复: 没有理解你的具体问题是什么,可否详细说明?
作者回复: 你好,能否具体解释下哪里有耦合?你的建议是? 另外这个项目主要是学习演示用,权限比较简单,实际可以设计更灵活。
作者回复: 你好,具体怎么耦合了?另外这个项目主要是学习演示用,权限比较简单,实际可以设计更灵活。