为什么要建设企业网站,ui网页设计课程,长春优化所,网站建设中模版1. Apache APISIX介绍
Apache APISIX 是 Apache 软件基金会下的云原生 API 网关#xff0c;它兼具动态、实时、高性能等特点#xff0c;提供了负载均衡、动态上游、灰度发布#xff08;金丝雀发布#xff09;、服务熔断、身份认证、可观测性等丰富的流量管理功能。我们可以…1. Apache APISIX介绍
Apache APISIX 是 Apache 软件基金会下的云原生 API 网关它兼具动态、实时、高性能等特点提供了负载均衡、动态上游、灰度发布金丝雀发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。我们可以使用 Apache APISIX 来处理传统的南北向流量也可以处理服务间的东西向流量。同时它也支持作为 K8s Ingress Controller 来使用。
1.1. 特色优势
n 多平台支持APISIX 提供了多平台解决方案它不但支持裸机运行也支持在 Kubernetes 中使用还支持与 AWS Lambda、Azure Function、Lua 函数和 Apache OpenWhisk 等云服务集成。
n 全动态能力APISIX 支持热加载这意味着你不需要重启服务就可以更新 APISIX 的配置。请访问为什么 Apache APISIX 选择 Nginx Lua 这个技术栈以了解实现原理。
n 精细化路由APISIX 支持使用 NGINX 内置变量做为路由的匹配条件你可以自定义匹配函数来过滤请求匹配路由。
n 运维友好APISIX 支持与以下工具和平台集成HashiCorp Vault、Zipkin、Apache SkyWalking、Consul、Nacos、Eureka。通过 APISIX Dashboard运维人员可以通过友好且直观的 UI 配置 APISIX。
n 多语言插件支持APISIX 支持多种开发语言进行插件开发开发人员可以选择擅长语言的 SDK 开发自定义插件。
官方网站地址https://apisix.apache.org/
2. MaxKey介绍
Dromara MaxKey社区以“安全连接、传递信任”为宗旨专注于身份安全管理(IM)、单点登录(SSO)和云身份认证(IDaas)领域将为客户提供企业级的身份管理和认证提供全面的4A安全管理指AccountAuthenticationAuthorization和Audit。
为企业提供社区版IAM产品减少企业建设IAM的成本同时提供企业版的IAM咨询和技术支持从而提高客户体验和降低企业内部的自开发成本。
MaxKey单点登录认证系统谐音为马克思的钥匙寓意是最大钥匙是业界领先的IAM-IDaas身份管理和认证产品支持OAuth 2.x/OpenID Connect、SAML 2.0、JWT、CAS、SCIM等标准协议提供标准、安全和开放的用户身份管理(IDM)、身份认证(AM)、单点登录(SSO)、资源管理和权限管理等开源、安全、自主可控。
官方网站地址https://www.maxkey.top/
3. MaxKey安装配置
安装的版本为v3.5.X请参照官方安装文档
https://www.maxkey.top/zh/conf/tutorial.html
3.1. 登录管理控制台
登录到MaxKey后台管理 3.2. 应用配置
进入后台“应用管理”编辑应用 配置主要明细入下 配置对应关系 序号 MaxKey 参数 备注 1 登录地址 http://192.168.0.105:9080/protectweb 2 访问协议 OAuth2.0 3 回调地址 http://192.168.0.105:9080/protectweb/callback 4 授权方式 authorization_code password client_credentials 5 适配 启用 适配 6 适配器 OAuth2.0默认适配器 适配器
3.3. 应用访问赋权 如果不在该列表内可以“新增成员” 4. APISIX安装配置
安装的版本为v3.1请参照官方安装文档
https://apisix.apache.org/zh/docs/apisix/installation-guide/ 5. 场景示例
开源的 API 网关 Apache APISIX 支持使用 openid-connect 插件对接以上身份认证服务APISIX 会将所有未认证的请求重定向至身份认证服务的登录页当登录成功后 APISIX 会将获取到的用户信息发送至上游服务。 下图为 OpenID Connect 协议交互流程 在重定向阶段RedirectIdP 将用户重定向到一个预先配置好的重定向 URLredirect_url例如 http://192.168.0.105:9080/protectweb/callback。请注意这是一个在 APISIX 中不存在的 API它只用于捕获相关的请求并在 OIDC 逻辑中完成 Token 交换的功能。请不要使用这个地址作为触发 OIDC 插件重定向的条件否则它将返回如下错误the error request to the redirect_uri path, but theres no session state found。
5.1. 相关术语
1. Bearer Only MaxKey支持账户密码或 AccessToken 进行身份认证若启用 bearer_only 选项则仅允许通过 AccessToken 进行认证该方式适用于服务之间的访问认证
2. Inst MaxKey中的 Inst相当于一个租户不同 Inst 是相互隔离的只能管理和验证它们所具有的用户
3. Scope这是一种限制在访问令牌AccessToken中声明的角色的方法。例如当一个客户端要求验证一个用户时客户端收到的访问令牌将只包含范围明确指定的角色映射。客户端范围允许你限制每个单独的访问令牌的权限而不是让客户端访问用户的所有权限
4. UserUser 是可以登录到 MaxKey的用户可以思考下你所用过的 SSO 登录服务
5. Client客户端是指想要使用 MaxKey来保护的服务。 5.2. 前置条件
本示例使用 APISIX的默认服务 作为上游服务它将返回请求中的所有内容。 5.3. 场景一使用账户密码保护上游服务
本示例将引导客户端到登陆页通过账户密码的方式进行身份认证
5.3.1. 创建一条路由
APISIX登录 路由创建配置如下 {_meta: {disable: false},bearer_only: false,client_id: ae20330a-ef0b-4dad-9f10-d5e3485ca2ad,client_secret: KQY4MDUwNjIwMjAxNTE3NTM1OTEYty,discovery: http://192.168.0.104/sign/authz/oauth/v20/1/.well-known/openid-configuration?client_idae20330a-ef0b-4dad-9f10-d5e3485ca2ad,introspection_endpoint: ,introspection_endpoint_auth_method: ,logout_path: /protectapi/logout,realm: 1,redirect_uri: http://192.168.0.105:9080/protectweb/callback
}
复制 5.3.2. 访问未授权地址
访问 http://192.168.0.105:9080/protectweb/ 时由于未进行登录因此将被引导到 MaxKey 的登录页面 5.3.3. 授权应用访问
1、输入账号admin、密码maxkey完成登录后
2、成功跳转到 http://192.168.0.105:9080/protectweb/ 页面 5.4. 场景二使用 AccessToken 验证身份
通过启用 bearer_only 参数对应用之间的调用进行身份认证此时应用访问 APISIX 时需携带 Authorization Header否则该请求将被拒绝。
5.4.1. 创建一条路由 {_meta: {disable: false},bearer_only: true,client_id: ae20330a-ef0b-4dad-9f10-d5e3485ca2ad,client_secret: KQY4MDUwNjIwMjAxNTE3NTM1OTEYty,discovery: http://192.168.0.104/sign/authz/oauth/v20/1/.well-known/openid-configuration,introspection_endpoint: http://192.168.0.104/sign/authz/oauth/v20/introspect,introspection_endpoint_auth_methods_supported: [client_secret_basic],logout_path: /protectweb/logout,realm: 1,redirect_uri: http://192.168.0.105:9080/protectweb/callback
}
复制 5.4.2. 访问未授权地址
未携带 X-Access-Token 访问 Apache APISIX 时将返回 401 表明未经授权 curl -X GET -i http://192.168.0.105:9080/protectapi/
5.4.3. 调用 MaxKey API 获取 AccessToken 对应命令入下
curl -X GET -i http://192.168.0.104/sign/authz/oauth/v20/token?grant_typepasswordusernameadminclient_idae20330a-ef0b-4dad-9f10-d5e3485ca2adclient_secretKQY4MDUwNjIwMjAxNTE3NTM1OTEYtypasswordmaxkey
复制 5.4.4. 携带AccessToken访问
将 AccessToken 放于 Authorization 头中请求 APISIX替换掉 ${AccessToken}可以认证成功 对应命令入下
curl -X GET -H Authorization: Bearer 87d24b21-b9a5-472e-a405-e2ead4d1bb9f -i http://192.168.0.105:9080/protectapi/
复制 5.5. 场景三上游服务解析 UserInfo 信息
当启用 APISIX set_userinfo_header 配置后认证成功后回调请求将携带 X-Userinfo 请求头它包含了 User 的基本信息可通过 base64_decode 获得用户内容。
6. 常见问题
6.1. 为什么 APISIX 中 Cookie 值非常长
因为 APISIX 会将 id_token、access_token、refresh_token 等值写入 Cookie 中因此整个 Cookie 内容比较长。具体实现可阅读 lua-resty-openidc 库中设置 session 的逻辑。
6.2. 如何修改 Session 存储的 Cookie 名称、存储位置
目前 openid-connect 插件未提供自定义这部分配置的能力因此可以使用 lua-resty-session 中提供的方法通过 NGINX 变量的方式对其默认配置进行覆盖。 此处借助 APISIX 提供的 NGINX 配置注入能力以实现覆盖通过在配置文件 {apisix}/conf/config.yaml 中添加这些代码可修改 Session 存储 Cookie 的名称
nginx_config: http_server_configuration_snippet: | set $session_name session_override;