我的项目介绍
对于 Apache APISIX
Apache APISIX 是一个动静、实时、高性能的 API 网关,提供负载平衡、动静上游、灰度公布、服务熔断、身份认证、可观测性等丰盛的流量治理性能。Apache APISIX 不仅反对插件动静变更和热插拔,而且领有泛滥实用的插件。Apache APISIX 的 OpenID Connect 插件反对 OpenID Connect 协定,用户能够应用该插件让 Apache APISIX 对接 Authing 服务,作为集中式认证网关部署于企业中。
对于 Authing
Authing 是国内首款以开发者为核心的全场景身份云产品,集成了所有支流身份认证协定,为企业和开发者提供欠缺平安的用户认证和拜访治理服务。以「API First」作为产品基石,把身份畛域所有罕用性能都进行了模块化的封装,通过全场景编程语言 SDK 将所有能力 API 化提供给开发者。同时,用户能够灵便的应用 Authing 凋谢的 RESTful APIs 进行性能拓展,满足不同企业不同业务场景下的身份治理需要。
什么是集中式身份认证
传统身份认证
在传统认证模式下,各个后端应用服务须要独自开发性能以反对身份认证性能,例如与身份提供商进行交互、获取用户的身份信息等性能。
集中式身份认证
与传统认证模式不同,集中身份认证模式把用户认证从应用服务中抽离了进去。以 Apache APISIX 为例,集中认证的流程如上图所示:首先由用户发动申请(request),而后由前置的网关负责用户认证流程,与身份提供方对接,向身份提供方发送身份认证(authorization)申请。身份提供方返回用户身份信息(user info)。网关实现用户身份辨认后,将用户身份信息通过申请头的模式转发至后端利用。
集中式身份认证治理的长处
相比拟传统认证模式,集中认证模式下有如下长处:
- 简化利用开发流程,升高开发利用工作量和保护老本,防止各个利用反复开发身份认证逻辑。
- 进步业务的安全性,集中身份认证模式在网关层面可能及时拦挡未经身份认证的申请,爱护后端的利用。
同时联合 Authing 弱小的身份认证治理性能,可实现如下性能:
- 通过控制台对身份认证服务进行生命周期治理,包含创立、启用、禁用等。
- 提供实时、可视化的利用监控,包含:接口申请次数、接口调用提早和接口错误信息,并且进行实时告警告诉。
- 集中式日志,能够不便地查看用户登录、登出以及对利用的调整和批改信息。
更多具体内容可参考 Authing 利用集成网关。
如何应用
步骤一:配置 Authing
1. 登录 Authing 账号,抉择自建利用,并填入利用名称和认证地址。如果你没有 Authing 账号,请拜访 Authing 官网,单击右上角“登录 / 注册”,注册一个 Authing 账号。
2. 单击“创立”,创立一个 Authing 利用。
3. 设置登录和登出的跳转 URL。在认证过程中,Authing 将会回绝除配置以外的回调 URL,因为本次为本地测试,所以将登录回调 URL 和登出回调 URL 都设置为 APISIX 拜访地址 http://127.0.0.1:9080/
。
4. 创立用户(可选)。在用户列表页面,创立用户,账号密码别离为 user1/user1,并且能够在「用户信息 - 受权治理」页面中设置是否容许利用的拜访(默认为容许)。
5. 拜访利用页面,获取以下配置,配置 Apache APISIX OpenID Connect 时须要提供这些信息:
- App ID:OAuth client ID,即利用的 ID。与下文的
client_id
和{YOUR_CLIENT_ID}
对应。 - App secret:OAuth client secret,即利用密钥。与下文的
client_secret
和{YOUR_CLIENT_SECRET}
对应。 - 服务发现地址:应用服务发现的地址。与下文的
{YOUR_DISCOVERY}
对应。
步骤二:装置 Apache APISIX
目前可通过源码包、Docker、Helm Chart 等多种形式来装置 Apache APISIX。
装置依赖
Apache APISIX 的运行环境须要依赖 NGINX 和 etcd,所以在装置 Apache APISIX 前,请依据您应用的操作系统装置对应的依赖。目前官网提供了 CentOS7、Fedora 31 & 32、Ubuntu 16.04 & 18.04、Debian 9 & 10 和 MacOS 上的依赖装置操作步骤,详情请参考装置依赖。
通过 Docker 或 Helm Chart 装置 Apache APISIX 时,曾经蕴含了所需的 NGINX 和 etcd,请参照各自对应的文档。
通过 RPM 包装置(CentOS 7)
这种装置形式实用于 CentOS 7 操作系统,请运行以下命令装置 Apache APISIX。
sudo yum install -y https://github.com/apache/apisix/releases/download/2.7/apisix-2.7-0.x86_64.rpm
通过 Docker 装置
详情请参考:应用 Docker 装置 Apache APISIX。
通过 Helm Chart 装置
详情请参考:应用 Helm Chart 装置 Apache APISIX。
通过源码包装置
1. 创立一个名为 apisix-2.7
的目录。
mkdir apisix-2.7
2. 下载 Apache APISIX Release 源码包:
wget https://downloads.apache.org/apisix/2.7/apache-apisix-2.7-src.tgz
您也能够通过 Apache APISIX 官网下载 Apache APISIX Release 源码包。Apache APISIX 官网也提供了 Apache APISIX、APISIX Dashboard 和 APISIX Ingress Controller 的源码包,详情请参考 Apache APISIX 官网 - 下载页。
3. 解压 Apache APISIX Release 源码包:
tar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7
4. 装置运行时依赖的 Lua 库:
# 切换到 apisix-2.7 目录
cd apisix-2.7
# 创立依赖
make deps
初始化依赖
运行以下命令初始化 NGINX 配置文件和 etcd。
# initialize NGINX config file and etcd
make init
步骤三:启动 Apache APISIX 并配置对应的路由
1. 运行以下命令,启动 Apache APISIX。
apisix start
2. 创立路由并配置 OpenID Connect 插件。OpenID Connect 配置列表如下:
以下代码示例通过 Apache APISIX Admin API 进行创立路由,设置路由的上游为 httpbin.org。httpbin.org 是一个简略的用于接管申请和响应申请的后端服务,下文将应用 httpbin.org 的 get 页面,参考 http bin get。
具体配置项请参考 Apache APISIX OpenID Connect Plugin。
curl -XPOST 127.0.0.1:9080/apisix/admin/routes -H "X-Api-Key: edd1c9f034335f136f87ad84b625c8f1" -d '{"uri":"/*","plugins":{"openid-connect":{"client_id":"{YOUR_CLIENT_ID}","client_secret":"{YOUR_CLIENT_SECRET}","discovery":"https://{YOUR_DISCOVERY}","scope":"openid profile","bearer_only":false,"realm":"apisix","introspection_endpoint_auth_method":"client_secret_post","redirect_uri":"http://127.0.0.1:9080/"
}
},
"upstream":{
"type":"roundrobin",
"nodes":{"httpbin.org:80":1}
}
}'
步骤四:拜访 Apache APISIX
1. 拜访 “http://127.0.0.1:9080/get”,因为曾经开启了 OpenID Connect 插件,所以页面被重定向到 Authing 登录页面 (可在 Authing 控制台中「利用 - 品牌化」对该页面进行定制)。
2. 输出用户在 Authing 注册的账号密码,或者在步骤一中创立的用户 user1/user1,单击“登录”,登录 Authing 账户。
3. 登录胜利之后,能胜利拜访到 httpbin.org 中的 get 页面。该 httpbin.org/get 页面将返回申请的数据如下:
...
"X-Access-Token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InFqeU55aVdVd2NhbUFxdEdVRUNCeFNsTWxQSWtTR2N1NmkyZzhEUk1OSGsifQ.eyJqdGkiOiJjTy16a0pCS0NSRFlHR2kyWkJhY0oiLCJzdWIiOiI2MWM5OGFmOTg0MjI4YWU0OTYyMDU4NTIiLCJpYXQiOjE2NDA1OTg4NTgsImV4cCI6MTY0MTgwODQ1OCwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSIsImlzcyI6Imh0dHBzOi8vYXBpc2l4LmF1dGhpbmcuY24vb2lkYyIsImF1ZCI6IjYxYzk4M2M0YjI4NzdkNDg2OWRkOGFjYiJ9.l2V8vDWcCObB1LjIhKs2ARG4J7WuB-0c-bnYZG2GP2zcpl6PMAPcId2B76CaXCU58ajGcfRmOlWJ67UaHrfWKv8IM4vcYN1gwhKdokSyrhEM31gQE-MzNEsEbPaVIGXdpR1N2JnAJK5-tKIjopDAXSwArfO6fQKTpjLhCi3COIA169WGRR4CKCwNzzpFAYP2ilNc18D_HRTBLS6UjxZSNUtWE5dbx7uBjblhwIwn5e1fxiEQcknVK8Dxf8NUliFECvr02HX2hNvmuCECkvA_mZYlshAeqidK8tSEXirAWsWS5jlXFqLiBJkhSHFrbxRyqeOSfJCJR_YcCwk9AzgZGg",
"X-Id-Token": "eyJhdF9oYXNoIjoiRl8tRjZaUVgtWVRDNEh0TldmcHJmUSIsImJpcnRoZGF0ZSI6bnVsbCwiZmFtaWx5X25hbWUiOm51bGwsImdlbmRlciI6IlUiLCJnaXZlbl9uYW1lIjpudWxsLCJpc3MiOiJodHRwczpcL1wvYXBpc2l4LmF1dGhpbmcuY25cL29pZGMiLCJwaWN0dXJlIjoiaHR0cHM6XC9cL2ZpbGVzLmF1dGhpbmcuY29cL2F1dGhpbmctY29uc29sZVwvZGVmYXVsdC11c2VyLWF2YXRhci5wbmciLCJwcmVmZXJyZWRfdXNlcm5hbWUiOm51bGwsInVwZGF0ZWRfYXQiOiIyMDIxLTEyLTI3VDA5OjU0OjE3Ljc3M1oiLCJ3ZWJzaXRlIjpudWxsLCJ6b25laW5mbyI6bnVsbCwibmFtZSI6bnVsbCwiaWF0IjoxNjQwNTk4ODU4LCJuaWNrbmFtZSI6bnVsbCwibm9uY2UiOiJmMTlmZjhjODM5NzdmZjNlMDczMzZmMzg3Y2QxM2EzMSIsIm1pZGRsZV9uYW1lIjpudWxsLCJleHAiOjE2NDE4MDg0NTgsInN1YiI6IjYxYzk4YWY5ODQyMjhhZTQ5NjIwNTg1MiIsImxvY2FsZSI6bnVsbCwiYXVkIjoiNjFjOTgzYzRiMjg3N2Q0ODY5ZGQ4YWNiIiwicHJvZmlsZSI6bnVsbH0=",
"X-Userinfo": "eyJ3ZWJzaXRlIjpudWxsLCJ6b25laW5mbyI6bnVsbCwibmFtZSI6bnVsbCwicHJvZmlsZSI6bnVsbCwibmlja25hbWUiOm51bGwsInN1YiI6IjYxYzk4YWY5ODQyMjhhZTQ5NjIwNTg1MiIsImxvY2FsZSI6bnVsbCwiYmlydGhkYXRlIjpudWxsLCJmYW1pbHlfbmFtZSI6bnVsbCwiZ2VuZGVyIjoiVSIsImdpdmVuX25hbWUiOm51bGwsIm1pZGRsZV9uYW1lIjpudWxsLCJwaWN0dXJlIjoiaHR0cHM6XC9cL2ZpbGVzLmF1dGhpbmcuY29cL2F1dGhpbmctY29uc29sZVwvZGVmYXVsdC11c2VyLWF2YXRhci5wbmciLCJwcmVmZXJyZWRfdXNlcm5hbWUiOm51bGwsInVwZGF0ZWRfYXQiOiIyMDIxLTEyLTI3VDA5OjU0OjE3Ljc3M1oifQ=="
...
其中:
X-Access-Token:Apache APISIX 将从用户提供商获取到的 access token 放入 X-Access-Token 申请头,能够通过插件配置中的 access_token_in_authorization_header
来抉择是否放入 Authorization 申请头中。
X-Id-Token:Apache APISIX 将从用户提供商获取到的 ID token 通过 base64 编码之后放入 X-Id-Token 申请头,能够通过插件配置中的 set_id_token_header
来抉择是否开启该性能,默认为为开启状态。
X-Userinfo:Apache APISIX 将从用户提供商获取到的用户信息,通过 base64 编码之后放入 X-Userinfo,你能够通过插件配置中的 set_userinfo_header
来抉择是否开启该性能,默认为开启状态。
由此能够看到,Apache APISIX 将会携带 X-Access-Token
、X-Id-Token
和 X-Userinfo
三个申请头传递至上游。
上游能够通过解析这几个头部,从而获取到用户 ID 信息和用户的元数据。
4. 在 Authing 控制台中的「审计日志 - 用户行为日志」中能够察看到 user1 用户在 2021.12.27 17:54:17
胜利登录。
总结
本文为大家形容了 Apache APISIX 和 Authing 对接的具体操作步骤,通过浏览本文,大家对于在 Apache APISIX 中应用 Authing 有了更清晰的了解。
Apache APISIX 不仅致力于放弃本身的高性能,也始终非常重视开源生态的建设。目前 Apache APISIX 曾经领有了 10+ 个认证受权相干的插件,反对与业界支流的认证受权服务对接。
如果你有对接其余认证受权的需要,无妨拜访 Apache APISIX 的 GitHub,通过 issue 留下你的倡议;或订阅 Apache APISIX 的邮件列表,通过邮件表白你的想法。
对于 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/…