写点什么

新版本插件解读|如何借助 Forward Auth 增强认证能力

  • 2022 年 2 月 15 日
  • 本文字数:1637 字

    阅读完需:约 5 分钟

Forward Auth 能巧妙地将认证与授权逻辑转移至专门的外部服务中,网关会将用户的请求转发至认证服务中,并在认证服务响应非 20x 状态时,阻止原有请求并替换结果。通过这样的方式,就可以实现认证未通过时,返回自定义报错或用户重定向至认证页面。


本文将介绍 Apache APISIX 2.12.0 版本中新增插件 forward-auth 的使用方法,为大家简单说明下如何使用这款设计简洁的认证模型。

原理


关于 forward-auth 插件在 Apache APISIX 中的运行原理与流程如上图所示,具体总结为以下几步:


  • 第一步:由客户端向 APISIX 发起请求

  • 第二步:由 APISIX 向用户配置的认证服务发起请求

  • 第三步:认证服务响应(2xx 或异常状态)

  • 第四步:APISIX 会根据认证服务响应,决定向上游转发请求直接****向客户端发送拒绝响应

如何使用

步骤一:设置认证服务

假设有这样一项认证服务,用户向其发送带有 Authorization 请求头的请求。如果这个数据通过验证则返回 200 状态码和一个名为X-User-ID的响应头;如果没有通过验证则认为认证状态过期,返回 302 状态码和Location响应头将客户端重定向至登录页面。

步骤二:创建路由并开启 forward-auth 插件



接下来,我们将配置一个路由并开启 forward-auth 插件,将上述的认证服务和上游应用对接起来。


curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{    "plugins": {        "forward-auth": {            "address": "http://127.0.0.1:9080/auth",            "request_headers": ["Authorization"],            "upstream_headers": ["X-User-ID"],            "client_headers": ["Location"]        }    },    "uri": "/user"}'
复制代码


上述配置细节释义:


  • 当有请求匹配到当前路由时,发送一个请求至 address 中的地址,其中将附带request_headers 中定义的请求头 Authorization(即配置需要由客户端转发至认证服务的请求头,如果不设置则不转发任何请求头),认证服务可以据此进行用户身份确认。

  • 如果认证通过,状态码为 200 并返回一个 upstream_headers 中定义的 X-User-ID(即认证通过时由认证服务转发至上游的请求头,如果不设置则不转发任何请求头)。

  • 如果认证失败,状态码为 302 并返回一个在 client_headers 中定义的 Location(即认证失败时由认证服务向客户端发送的响应头,如果不设置则不转发任何响应头)。

步骤三:测试请求

# 使用 POST 请求并发送数据curl http://127.0.0.1:9080/user \    --header 'Authorization: true'
HTTP/1.1 200 OKContent-Type: application/jsonContent-Length: 28Server: APISIX/2.11.0
{"user_id":"i-am-real-user"}
# 使用 GET 请求curl -i http://127.0.0.1:9080/user \ --header 'Authorization: false'
HTTP/1.1 302 FOUNDServer: APISIX/2.11.0Location: https://example.com/auth
复制代码

补充:关闭插件

如已使用完毕,只需移除路由配置中forward-auth插件相关配置并保存,即可关闭路由上的 Forward Auth 插件。得益于 Apache APISIX 的动态化特性,开启关闭插件的过程都不需要重启 Apache APISIX。

总结

想要获取更多关于forward-auth插件说明和完整配置列表,可参考:https://apisix.apache.org/docs/apisix/next/plugins/forward-auth

关于 Apache APISIX

Apache APISIX 是一个动态、实时、高性能的开源 API 网关,提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。


Apache APISIX 可以帮助企业快速、安全地处理 API 和微服务流量,包括网关、Kubernetes Ingress 和服务网格等。目前已被普华永道数据安全团队、腾讯蓝军、平安银河实验室、爱奇艺 SRC 和源堡科技安全团队等专业网络安全机构测试,并给予了高度认可。


Apache APISIX 落地用户(仅部分)



  • Apache APISIX GitHub:https://github.com/apache/apisix

  • Apache APISIX 官网:https://apisix.apache.org/

  • Apache APISIX 文档:https://apisix.apache.org/zh/docs/apisix/getting-started

用户头像

Github:https://github.com/apache/apisix 2021.06.02 加入

Apache APISIX 是一个云原生、高性能、可扩展的微服务 API 网关。它是基于 OpenResty 和 etcd 来实现,和传统 API 网关相比,Apache APISIX 具备动态路由和插件热加载,特别适合微服务体系下的 API 管理。

评论

发布
暂无评论
新版本插件解读|如何借助 Forward Auth 增强认证能力