# 《API网关》第7章:权限认证组件(Shiro+Jwt)

作者:小傅哥
博客:https://bugstack.cn (opens new window)

沉淀、分享、成长,让自己和他人都能有所收获!😄

  • 本章难度:★★☆☆☆
  • 本章重点:引入Shiro、Jwt 整合两部分功能,提供出认证服务。为以下章在网络通信中验证 Token 信息做准备。
  • 课程视频https://t.zsxq.com/06eQ3je66 (opens new window)

# 一、学习指引

为什么你的工程做不到单元测试?

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。但在实际开发中大部分实际情况下,都没有做单元测试。做的只是为了测某个功能点,而启动的一整条功能测试。

那么之所以出现这样的情况,主要在于系统功能的设计和开发中没有对功能节点进行拆分,使很多流程的边界不清晰。就像把某一功能点直接编写在业务流程中,当你发现这一块功能点有问题的时候,却没法独立测试。只能启动整个链路的功能,并传入与一些与要关注核心模块无关的参数信息。

所以我们在做功能的设计和实现时,要注意这些模块的边界,并让它们尽可能的先保持独立运行后,依照设计原则编入整个流程中去。这样才能真的满足单元测试,否则你在做的都是整块的大的流程验证而已。

# 二、权限校验设计

在我们的实现的API网关中,当接收 HTTP 请求以后,开始调用对应的 RPC 接口前,其实还应该做一步权限验证。也就是说你当前调用的 HTTP 接口是否含带了我授予的 Token 信息,这个 Token 是否在有效期范围等控制,这样才能保证一个 HTTP 的调用和返回结果是安全可靠的。

  • 关于网关中权限的校验会使用到 Shiro + Jwt,同时还要提供单独的 Handler 来处理 Netty 中的通信对信息的校验处理。但鉴于这部分属于两块功能,所以本章只先完成关于 Shiro + Jwt 部分。
  • Apache Shiro 是 Java 的一个安全框架。目前,使用 Apache Shiro 的人越来越多,因为它相当简单。对比于 Spring Security,可能没有做的功能强大,但是在实际工作时并不需要那么复杂的东西,所以使用小而简单的 Shiro 就足够了。