共计 3613 个字符,预计需要花费 10 分钟才能阅读完成。
身份认证在日常生活当中是十分常见的一项性能,大家平时根本都会接触到。比方用支付宝生产时的人脸识别确认、公司下班上班时的指纹 / 面部打卡以及网站上进行账号密码登录操作等,其实都是身份认证的场景体现。
如上图,Jack 通过账号密码申请服务端利用,服务端利用中须要有一个专门用做身份认证的模块来解决这部分的逻辑。申请处理完毕之后,如果应用 JWT Token 认证形式,服务器会反馈一个 Token 去标识这个用户为 Jack。如果登录过程中账号密码输出谬误,就会导致身份认证失败。这个场景大家必定都十分相熟,这里就不做开展举例了。
网络身份认证的意义在哪里?
安全性
网络身份认证确保了后端服务的安全性,防止了未经受权的拜访,从而确保数据的安全性。比方避免某些黑客攻击,以及一些歹意调用,这些都能够通过身份认证进行拦截。
实用性
从实用性的角度思考,它能够更不便地记录操作者或调用方。比方下班打卡其实就是通过记录「谁进行了这项操作」来统计员工下班信息。
其次它能够记录拜访频率及拜访频次。例如记录某用户在最近几分钟中发动申请的频率和频次,能够判断这个用户沉闷水平,也能够判断是否为歹意攻打等。
功能性
在性能层面,它通过辨认身份能够对不同的身份进行不同权限的操作解决。比方在公司里,你的身份权限无奈应用某些页面或服务。再粗疏一点,对不同身份或者不同的 API 接口调用方做一些相干技术上的限度策略,如限流限速等,以此来达到依据不同的用户(调用方)采取不同的性能限度。
Apache APISIX 进行集中式身份认证长处
从传统到新模式
如下图所示,左侧的图为咱们展现了一种比拟常见的传统身份认证办法。每一个应用服务模块去开发一个独自的身份认证模块,用来反对身份认证的一套流程解决。但当服务量多了之后,就会发现这些模块的开发工作量都是十分微小且反复的。
这种时候,咱们能够通过把这部分的开发逻辑搁置到 Apache APISIX 的网关来实现对立,缩小开发量。
如右图所示,用户或利用方间接去申请 Apache APISIX,而后 Apache APISIX 通过辨认并认证通过后,会将甄别的身份信息传递到上游应用服务。之后上游应用服务就能够从申请头中读到这部分信息,而后进行后续相干工作的解决。
讲完了大略流程,咱们来具体列举下。
长处一:配置收敛,对立治理
如上图是一张 APISIX-Dashboard 的界面截图,能够看到路由、Consumer 等数据信息。这里的 Consumer 能够了解为一个利用方,比方能够为利用专门去创立一个 Consumer 并配置相干的认证插件,例如 JWT、Basic-Auth 等插件。当有新的服务呈现时,咱们须要再创立一个 Consumer,而后将这部分配置信息给配置到第二个应用服务上。
通过集中式身份认证,能够将客户配置进行收敛并对立治理,达到升高运维老本的成果。
长处二:插件丰盛,缩小开发
Apache APISIX 作为一个 API 网关,目前已开启与各种插件性能的适配单干,插件库也比拟丰盛。目前曾经可与大量身份认证相干的插件进行搭配解决,如下图所示。
根底认证插件比方 Key-Auth、Basic-Auth,他们是通过账号密码的形式进行认证。
简单一些的认证插件如 Hmac-Auth、JWT-Auth。如 Hmac-Auth 通过对申请信息做一些加密,生成一个签名。当 API 调用方将这个签名携带到 Apache APISIX 的网关 Apache APISIX 会以雷同的算法计算签名,只有当签名方和利用调用方认证雷同时才予以通过。
Authz-casbin 插件是目前 Apche APISIX 与 Casbin 社区正在进行合作开发的一个我的项目,它的利用原理是依照 Casbin 的规定,去解决一些基于角色的权限管控 (RBAC),进行 ACL 相干操作。
其余则是一些通用认证协定和联结第三方组件进行单干的认证协定,例如 OpenID-Connect 身份认证机制,以及 LDAP 认证等。
长处三:配置灵便,功能强大
功能强大该如何了解,就是 Apache APISIX 中能够针对每一个 Consumer(即调用方利用)去做不同级别的插件配置。
如上图,咱们创立了两个消费者 Consumer A,Consumer B。咱们将 Consumer A 利用到 利用 1
,则后续 利用 1 的拜访将会开启 Consumer A 的这部分插件,例如 IP 黑白名单,限度并发数量等。将 Consumer B 利用到 利用 2,因为开启了 http-log
插件,则 利用 2 的拜访日志将会通过 HTTP 的形式发送到日志零碎进行收集。
Apache APISIX 中身份认证的玩法
对于 Apache APISIX 身份认证的玩法,这里为大家提供三个阶段的玩法举荐,大家仅作参考,也能够在这些根底上,进行更深度的应用和利用。
高级:一般玩法
一般玩法举荐大家基于 Key-Auth、Basic-Auth、JWT- Auth 和 Hmac-Auth 进行,这些插件的应用须要与 Consumer 进行关联应用。
创立路由,配置身份认证插件
创立路由,配置上游为 httpbin.org,同时开启 basic-auth
插件。
创立消费者,配置身份信息
创立消费者 foo。在消费者中,咱们须要配置用户的认证信息,例如 username
为 foo
,password
为 bar
。
应用服务携带认证信息进行拜访
利用携带 username:foo
, password: bar
拜访 Apache APISIX。Apache APISIX 通过认证,并将申请 Authorization 申请头携带至上游 httpbin.org。因为 httpbin.org 中 get 接口会将申请信息返回,因而咱们能够在其中察看到申请头 Authorization
。
中级:进阶玩法
进阶模式下,是应用 Apache APISIX 与 OpenID-Connect 插件进行对接第三方认证服务。OpenID-Connect 是一种认证机制,能够采纳该认证机制对接用户的用户管理系统或者用户治理服务,例如国内的 Authing 和腾讯云,国外的 Okta 和 Auth0 等。
具体操作步骤如下,这里应用 Okta 云服务举例:
创立 OpenID-Connect 利用
在 Okta 控制台页面创立一个反对 OpenID-Connect 的利用。
创立路由,配置 OpenID-Connect 插件
创立路由,配置拜访的上游地址为 httpbin.org
,同时开启 openid-connect
插件,将 Okta 利用的配置填写到 openid-connect 插件中。
拜访跳转登录后,上游利用获取用户信息
此时,当用户拜访 Apache APISIX 时,会先重定向到 Okta 登录页面。此时须要在该页面填写 Okta 中曾经存在的用户的账号密码。登录实现之后,Apache APISIX 会将本次认证的 Access-Token,ID-Token 携带至上游,同时将本次认证的用户信息以 base64 的形式编码至 Userinfo 申请头,传递至上游。
高级:DIY 玩法
这里提供的 DIY 玩法是利用了 Serverless 插件,这款插件功能丰富,玩法也十分多。大家如果有本人的应用玩法,也欢送在社区内进行交换。
具体操作流程就是将本人的代码片段通过 Serverless 插件上传到 Apache APISIX,这个过程中 Serverless 插件反对动静配置和热更新。
形式一:自定义判断逻辑
通过申请头、参数等相干信息,来进行一些判断。通过这种做法,咱们能够去实现本人的一些规定,比如说联合企业外部的一些认证,或者去写一些本人的业务逻辑。
形式二:发动认证鉴权申请
通过 HTTP 库发动一个 HTTP 申请,咱们能够利用第三方服务做一些认证、鉴权相干事件,而后解析返回后果。通过这种形式,咱们能够做的事件就能够扩大很多。比方对接 Redis 或数据库,只有是通过 TCP 或 UDP 这种模式的,都能够通过 Serverless 插件进行尝试。
配置上传
实现自定义代码片之后,咱们创立路由,并将代码片配置到 Serverless 插件。前面再通过拜访 Apache APISIX 获取相应的信息反馈,测试插件是否失效。
对于作者
作者朱欣欣,开源爱好者,Apache APISIX Committer。
对于 Apache APISIX
Apache APISIX 是一个动静、实时、高性能的开源 API 网关,提供负载平衡、动静上游、灰度公布、服务熔断、身份认证、可观测性等丰盛的流量治理性能。Apache APISIX 能够帮忙企业疾速、平安的解决 API 和微服务流量,包含网关、Kubernetes Ingress 和服务网格等。
Apache APISIX 落地用户(仅局部)
- Apache APISIX GitHub:https://github.com/apache/apisix
- Apache APISIX 官网:https://apisix.apache.org/
- Apache APISIX 文档:https://apisix.apache.org/zh/…