news 2026/9/12 15:53:24

Authelia 集成 Kiali:基于 OpenID Connect 1.0 实现服务网格可观测性平台单点登录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Authelia 集成 Kiali:基于 OpenID Connect 1.0 实现服务网格可观测性平台单点登录

Authelia 集成 Kiali:基于 OpenID Connect 1.0 实现服务网格可观测性平台单点登录

【免费下载链接】autheliaThe Single Sign-On Multi-Factor portal for web apps. OpenID Certified™ and Post-Quantum Cryptography Ready.项目地址: https://gitcode.com/GitHub_Trending/au/authelia

本指南面向在 Kubernetes 集群中部署 Kiali 服务网格可观测性平台的运维与开发人员,讲解如何将 Kiali 作为 OpenID Connect 1.0 Relying Party(依赖方)接入 Authelia 提供的 OpenID Connect 1.0 Provider,实现统一身份认证与单点登录(SSO)。读完本文,你将掌握 Authelia 侧客户端注册的完整 YAML 配置、Kiali 侧 OpenID 认证策略的配置方法(Kiali CR 与 Kubernetes Secret),以及当 Kiali 存在 OIDC 兼容性缺陷时如何借助 Authelia 的 claims policy「逃生舱」(Configuration Escape Hatch)恢复登录功能。

测试版本

本集成指南基于以下版本撰写并验证:

  • Authelia:v4.39.24
  • Kiali:v2.12.0

本集成的支持等级为 community 级别(见文档 front matter 中的support.level: community),意味着该客户端由社区维护与验证,配置可能随版本演进而变化。

前置假设(Assumptions)

本示例基于以下假设展开,请根据你的实际部署环境替换对应值:

  • 应用根地址(Application Root URL)https://kiali.example.com/
  • Authelia 根地址(Authelia Root URL)https://auth.example.com/(该地址同时也是 OpenID Connect 1.0 Issuer)
  • Client IDkiali
  • Client Secretinsecure_secret

上述域名使用example.com作为文档站点变量(sitevar)的默认值,实际部署时应替换为你自己的域名。

开始之前(Before You Begin)

在配置任何 OpenID Connect 1.0 注册客户端之前,有几个必须注意的通用事项(源自 oidc-common 短代码):

  1. client_id必须全局唯一,本文示例中的kiali仅为演示可读性而使用,不应在生产环境中使用。建议使用 64 个随机字符;生成方式可参考 常见问题解答 中「How do I generate a client identifier or client secret?」一节。
  2. client_id只能包含 RFC3986 非保留字符,且长度不得超过 100 个字符。
  3. client_secret必须妥善保管:本文中的insecure_secret仅用于演示。Authelia 允许以明文存储,但该行为已弃用,未来版本不保证继续支持;强烈推荐在配置中存储哈希后的密钥(见下文 Authelia 配置中$pbkdf2-sha512$...格式的说明)。
  4. 当密钥以哈希形式存储时,如果哈希工作因子(work factor)过高,可能导致客户端认证超时,请参考 常见问题解答 中「Tuning the work factors」一节调整。
  5. 本文给出的 Authelia 配置只包含客户端注册部分,你必须同时配置 OpenID Connect 1.0 Provider 配置 指南中要求的其余必填项(如 issuer、密钥等)。
  6. 客户端注册仅展示了全部可用选项中的一小部分,建议完整阅读 OpenID Connect 1.0 Clients 配置 以了解每个选项的作用。

已知缺陷:Kiali 对 OpenID Connect 1.0 的支持不完整

本文档对应的 Kiali 版本存在已知的显著缺陷(claims hydration):该客户端并未真正支持 OpenID Connect 1.0,因为它没有遵循规范要求的流程去获取它需要的 claims——即没有使用 Access Token 向 UserInfo 端点请求 claims。这意味着仅按标准方式配置很可能无法完成登录,需要额外的「逃生舱」配置来绕过此缺陷,详见下文 配置逃生舱 一节。

此外,与多数此类客户端类似,Kiali 可能不将身份提供方的subissclaims(规范保证不变)绑定到本地账户,而是使用email等可变 claim,这可能带来账户提权风险(claim binding 问题)。规范要求客户端只能通过subiss组合锚定账户,详见 OpenID Connect 1.0 Section 5.7 Claim Stability and Uniqueness。

Authelia 侧配置

以下 YAML 是用于 Kiali 的 Authelia 客户端配置 示例:

identity_providers: oidc: ## The other portions of the mandatory OpenID Connect 1.0 configuration go here. ## See: https://www.authelia.com/c/oidc clients: - client_id: 'kiali' client_name: 'Kiali' client_secret: '$pbkdf2-sha512$310000$c8p78n7pUMln0jzvd4aK4Q$JNRBzwAo0ek5qKn50cFzzvE9RXV88h1wJn5KGiHrD0YKtZaR/nCb2CJPOsKaPK0hjf.9yHxzQGZziziccp6Yng' # The digest of 'insecure_secret'. public: false authorization_policy: 'two_factor' require_pkce: false pkce_challenge_method: '' redirect_uris: - 'https://kiali.example.com/kiali' scopes: - 'openid' - 'email' response_types: - 'code' grant_types: - 'authorization_code' access_token_signed_response_alg: 'none' userinfo_signed_response_alg: 'none' token_endpoint_auth_method: 'client_secret_post'

关键配置项说明

配置项说明
client_id/client_namekiali/Kiali客户端标识与显示名称
client_secretPBKDF2-SHA512 哈希insecure_secret的哈希摘要。使用哈希存储可避免明文泄漏,推荐做法;明文存储已弃用
publicfalse机密客户端(confidential client),需要在 Token 端点进行客户端认证
authorization_policytwo_factor该客户端要求两步验证(2FA),可根据你的安全策略改为one_factorbypass
require_pkce/pkce_challenge_methodfalse/ 空本示例未启用 PKCE(Kiali 端支持有限);生产环境建议结合客户端能力评估是否启用
redirect_urishttps://kiali.example.com/kiali授权码回跳地址,必须与 Kiali 实际部署地址一致,否则授权请求会被拒绝
scopesopenidemailKiali 通过emailclaim 识别用户名(见下文username_claim: 'email'
response_typescode仅使用标准授权码流程(Authorization Code Flow)
grant_typesauthorization_coderesponse_types: code对应
access_token_signed_response_alg/userinfo_signed_response_algnone访问令牌与 UserInfo 响应不做 JWT 签名,以兼容 Kiali
token_endpoint_auth_methodclient_secret_post客户端通过 POST 表单在 Token 端点提交密钥认证

关于response_typesgrant_typestoken_endpoint_auth_method的取值约束与各客户端类型默认行为,可参考 OpenID Connect 1.0 集成介绍 中的「Parameters」与「Client Authentication Method」章节,以及 客户端配置文档。

Kiali 侧配置

配置 Kiali 有两种方式:通过 配置文件(Kiali CR) 或通过 环境变量。本文以 Kiali CR 为主进行说明。

配置文件(Kiali CR)

调整你的 Kiali CR YAML 文件,将认证策略切换为 OpenID:

spec: auth: strategy: 'openid' openid: client_id: 'kiali' disable_rbac: true issuer_uri: 'https://auth.example.com' scopes: ['openid', 'email'] username_claim: 'email'

各字段说明:

  • strategy: 'openid':启用 OpenID Connect 认证策略;
  • client_id: 'kiali':与 Authelia 中注册的client_id保持一致;
  • disable_rbac: true:禁用 Kiali 自身的 RBAC 角色解析,用户通过认证即可访问(可根据你的授权需求调整);
  • issuer_uri:Authelia 的 OpenID Connect 1.0 Issuer 地址,即https://auth.example.com(不含末尾斜杠)。Kiali 会基于该地址自动发现/.well-known/openid-configuration等元数据端点;
  • scopes: ['openid', 'email']:与 Authelia 客户端注册中的 scopes 对应;
  • username_claim: 'email':使用 UserInfo 中的emailclaim 作为 Kiali 的用户名标识。

创建 OpenID Connect 客户端密钥 Secret

由于 Kiali 的 OpenID 策略无法直接读取 Authelia 侧哈希后的密钥,还需要在 Kubernetes 中创建包含明文 Client Secret 的 Secret 对象(该 Secret 由 Kiali 用于向 Authelia Token 端点认证):

apiVersion: v1 kind: Secret metadata: name: 'kiali' namespace: 'istio-system' labels: app: 'kiali' type: 'Opaque' stringData: oidc-secret: 'insecure_secret'

注意:此处的insecure_secret必须与 Authelia 配置中哈希对应的原始密钥一致;namespace需改为 Kiali 实际部署的命名空间。

环境变量

除 Kiali CR 外,Kiali 同样支持通过环境变量注入同等配置(AUTH_STRATEGYAUTH_OPENID_CLIENT_IDAUTH_OPENID_ISSUER_URIAUTH_OPENID_SCOPESAUTH_OPENID_USERNAME_CLAIM等),具体变量名请以 Kiali OpenID Connect 策略官方文档 为准。两种方式二选一,配置内容保持一致即可。

配置逃生舱(Configuration Escape Hatch)

正如「开始之前」所述,Kiali 存在 claims hydration 缺陷:它不会使用 Access Token 调用 UserInfo 端点获取 claims,也不支持claims 请求参数。Authelia 为此提供了逃生舱机制:通过为客户端配置claims_policy,将原本应通过 UserInfo 端点获取的 claims 直接注入 ID Token,从而恢复 Kiali 的登录功能。

逃生舱配置示例(由 oidc-escape-hatch-claims-hydration 短代码 生成的内容):

identity_providers: oidc: claims_policies: kiali: id_token: ['rat', 'groups', 'email', 'email_verified', 'alt_emails', 'preferred_username', 'name'] clients: - client_id: 'kiali' claims_policy: 'kiali'

该配置创建了一个名为kiali的 claims policy,将emailpreferred_username等 claims 显式放入 ID Token,并应用到kiali客户端。它本质上是将 claims 参数功能引入之前(claims parameter 引入前)的行为恢复出来,专门用于那些不支持 UserInfo 端点或 claims 参数的有缺陷客户端。

需要说明的是(依据 OpenID Connect 1.0 Claims 指南):

  • 规范的实现方式应当是客户端使用 Access Token 向 UserInfo 端点获取 claims(Requesting Claims using Scope Values明确要求 claims 仅在 UserInfo 端点可用);
  • 该逃生舱属于打破常规的应急手段(break-glass measure),仅在尽力而为(best-effort)基础上提供;
  • 建议先推动 Kiali 官方修复其缺陷;若项目停止维护或无力修复,再使用该方案;
  • 示例恢复了全部此前错误出现在 ID Token 中的 claims,实际使用时应只保留你真正需要的 claims(例如仅email),按需裁剪;
  • 该缺陷同时是客户端忽略 claim 稳定性要求(只用subiss锚定账户)的明显信号,使用时应知悉其安全含义。

完整接入流程回顾

  1. 在 Authelia 的identity_providers.oidc.clients中注册kiali客户端(含 redirect_uris、scopes、授权策略等);
  2. 在 Authelia 中追加claims_policies并为kiali客户端指定claims_policy,绕过 Kiali 的 claims hydration 缺陷;
  3. 修改 Kiali CR,将spec.auth.strategy设为openid并填写 issuer、client_id、scopes、username_claim;
  4. 在 Kubernetes 中创建包含oidc-secret的 Secret,供 Kiali 在 Token 端点完成客户端认证;
  5. 访问https://kiali.example.com/kiali,应被重定向至 Authelia 完成登录(本示例配置为two_factor,即需要第二因素验证),随后回跳至 Kiali。

参考与延伸阅读

  • Kiali OpenID Connect 策略官方文档
  • Authelia 的 OpenID Connect 1.0 集成介绍:涵盖响应类型、Grant Types、客户端认证方式、端点实现等规范细节
  • Authelia OpenID Connect 1.0 Clients 配置指南:客户端注册的全部可选配置项
  • Authelia OpenID Connect 1.0 Provider 配置指南:Provider 层面的必填配置与 claims_policies、scopes 定义
  • Authelia OpenID Connect 1.0 Claims 指南:claims 参数、scope 定义与逃生舱机制的完整说明
  • 常见问题解答:client_id / client_secret 生成、明文与哈希存储、工作因子调优等

【免费下载链接】autheliaThe Single Sign-On Multi-Factor portal for web apps. OpenID Certified™ and Post-Quantum Cryptography Ready.项目地址: https://gitcode.com/GitHub_Trending/au/authelia

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 15:50:03

Java包机制详解:从基础使用到企业级设计

1. Java包机制深度解析Java包(package)是Java语言中用于组织类和接口的命名空间机制。作为一名有10年Java开发经验的工程师,我经常看到新手开发者对包的理解停留在表面层次。实际上,Java包机制蕴含着许多设计哲学和工程实践智慧。…

作者头像 李华
网站建设 2026/9/12 15:47:36

Java多线程计时器原理与优化实践

1. 多线程计时器项目概述在Java并发编程中,计时器(Timer)是一个经典的多线程应用场景。这个看似简单的功能背后,涉及线程调度、任务队列、同步控制等多个核心技术点。我见过不少初级开发者直接使用Java内置的Timer类,却说不清楚其内部工作原理…

作者头像 李华
网站建设 2026/9/12 15:47:27

微弱信号检测的自相关法:原理、Python实现与工程要点

简介:针对通信、雷达等系统中微弱信号易被强噪声淹没的难点,这份MATLAB代码包给出基于自相关法的检测实现思路。自相关法利用信号与其时间延迟副本的统计相关性来区分周期信号与随机噪声,适合在低信噪比环境下提取信号特征。包内共2个m文件&a…

作者头像 李华