zhaoyu@home:~$

微服务设计模式-生产相关

安全相关

一个应用的开发者应对安全的如下几个方面负责:

  • 认证:验证一个人或者应用的身份,通常是主体的凭证,如ID和password。
  • 鉴权:验证主体有权限执行某个操作或者访问数据。应用通常通过角色和ACL(Access control lists)控制。
  • 审计:跟踪一个主体执行的操作。
  • 安全的进程间通信:所有的服务进出通信都应该通过TLS传输,数据进行加密。

在微服务中实现安全处理

认证

在API网关中完成认证,并返回对应的token。一旦通过身份认证,那么请求就可以访问多个服务了。认证通过后,api网关向服务请求时, 每次携带token,这样服务就可以验证请求并获取请求主体的信息。

鉴权

鉴权,一个实现的地方是API网关,如,只允许订单本人或者客服代表获取订单详情。这种集中化的授权减少了安全漏洞。可以通过如Spring Security在API网关中实现。

API网关进行鉴权的一个缺点是,有将API网关耦合到service的风险。需要他们保持同步,而且API网关只适合做角色访问URL的控制,不适合 做ACL控制,因为这需要它知道服务的领域逻辑。

也可以在服务中实现鉴权,这样可以同时实现基于角色的控制和ACL控制。

使用JWT传送用户身份和角色

在实现安全访问的时候,有两种类型的token可以选择,一种是不透明的token,通常是一种UUID。这种token的接收者必须发起一个同步的RPC 调用,验证该token并获取用户信息。所以会降低性能,增加延迟。

另一种是JWT,JWT拥有一个负载信息。可以用来包含用户信息。它的签名秘钥只有创建它的人知道。JWT的一个问题是,因为token是自包含, 不能撤销。所以无法回收落入恶意第三方之手的token。最好是为token设置一个短的过期时间。