Dubbo中通过过滤器实现服务认证

服务之间的认证,主要包含两部分,一是鉴定真假,二是鉴定篡改。

鉴定真假

在客户端发起请求的时候,添加一个TOKEN字段,服务端接收到请求先校验TOKEN字段是否存在,若存在则认为是合法请求,否则就可以抛出异常中断请求了。

TOKEN在服务端的验证一般有两种处理方式

  • 服务端内部保存有TOKEN,直接就可以验证。优点:无需远超调用,节省远超调用开销,加快了处理验证的失效;缺点:TOKEN保存在服务端,意味着TOKEN和服务端强耦合,不够灵活。
  • 将TOKEN保存在第三方媒介中,每次处理请求的时候去调用第三方媒介验证。优点:灵活性和可控性更好,可以为不同的客户端分配不同的TOKEN值并设置过期;缺点:远超调用会有一定的开销。

对代码进行修改,主要的改动点:

提供方:

  • 定义ProviderTokenFilter过滤器类,实现invoke方法。
  • 在invoke方法中,从invocation的attachments中获取TOKEN值,再从上下文中获取方法层面配置的TOKEN值,最后比较两个TOKEN值,一样继续执行业务,不一样则抛出异常直接中断调用流程。
  • 在接口所在服务的@DubboService注解中,为改方法添加一个TOEKN参数以及对应的值。
  • 将ProviderTokenFilter的类路径添加到META-INF文件夹下面的org.apache.dubbo.rpc.Filter文件中。

消费方:

  • 定义一个ConsumerTokenFilter过滤器,实现invoke方法。
  • 为调用接口所在的服务的@DubboReference注解中,为该方法添加一个TOKEN参数以及声明该方法需要开启TOKEN认证。
  • 在invoke方法中,从上下文中获取方法层面配置的TOKEN值,然后放进invocation的attachments中,跟随远超调用去往提供方。
  • 将ConsumerTokenFilter的类路径添加到META_INF文件夹下的org.apache.dubbo.rpc.Filter文件中。
鉴定篡改

鉴定篡改,主要是证明发送的数据在传输过程中没有被偷偷修改,可以考虑加密或加签。

  • 加密:把明文变成密文,保护数据在传输过程中信息不泄密。
  • 加签:为了验证传输过程中是否被修改。

至于选择加密还是加签,还是两者都使用,要根据实际情况选择,大部分场景舍弃加密处理,采用加签的方式基本就足够了。

代码修改思路:

  • 客户端新增一个 ConsumerAddSignFilter 加签过滤器,同样服务端也得增加一个 ProviderVerifySignFilter 验签过滤器。
  • 客户端将加签的结果放在 Invocation 的 attachments 里面。
  • 服务端获取加签数据时,进行验签处理,若验签通过则放行,否则直接抛出异常。
自定义认证过滤器的通用三部曲:
  • 首先,自定义过滤器继承 org.apache.dubbo.rpc.Filter接口,并实现invoke方法,同时在过滤器的@Activate注解中声明是提供方或消费方,还是两者都是。
  • 其次,可以在 @Method的parameters字段中为方法自定义一些属性,以辅助过滤器的通用逻辑处理。
  • 最后,将自定义过滤器的类路径一定要记得添加到META-INF文件夹下面的org.apache.dubbo.rpc.Filter文件中。

学习来源:极客时间 《Dubbo源码剖析与实战》学习笔记 Day4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员故里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值