禁用 PKCE 的 plain 方法

从 ACP v4.3.0 开始,PKCE(Proof Key for Code Exchange)验证默认启用于登录授权。为了保持向后兼容性,并兼容那些使用 Agnostic 生命周期且尚未升级的受影响插件,平台在升级后会保留 plain code challenge 方法以及安全的 S256 方法。

当所有受影响的 Agnostic 插件都已升级到与 ACP v4.3.0 兼容的版本后,应移除 plain 方法,以强制仅使用 S256 的 PKCE 验证。

前提条件

  • 具有集群管理员权限的 kubectl 访问 global 集群
  • 平台管理的所有集群都已升级到 ACP v4.3。
  • 以下使用 Agnostic 生命周期的受影响插件已升级到与 ACP v4.3 兼容的版本:
    • Alauda Container Platform Gitops
    • Alauda Build of Kiali
    • Kubeflow Base
    • Alauda AI
WARNING

在此上下文中,受影响的插件是指上面列出的、使用平台 OIDC 授权流程的 Agnostic 插件;在所有这些插件都升级到与 ACP v4.3 兼容的版本之前移除 plain,将导致身份验证失败。

操作步骤

OIDC 客户端配置以 OAuth2Client 自定义资源的形式存储在 cpaas-system 命名空间中。请通过 client ID 确定目标资源名称:

OIDC_CLIENT_NAME="$(kubectl get oauth2client -n cpaas-system \
  -o jsonpath='{range .items[?(@.id=="alauda-auth")]}{.metadata.name}{"\n"}{end}' | head -n 1)"
test -n "${OIDC_CLIENT_NAME}" || { echo "Failed to find OAuth2Client for id=alauda-auth"; exit 1; }
echo "Target OAuth2Client: ${OIDC_CLIENT_NAME}"

编辑 OAuth2Client 资源:

kubectl edit oauth2client "${OIDC_CLIENT_NAME}" -n cpaas-system

找到 codeChallengeMethods 字段,并移除 plain 条目,仅保留 S256

# Before
codeChallengeMethods:
- S256
- plain

# After
codeChallengeMethods:
- S256

保存并退出编辑器。更改会立即生效。

验证

确认 plain 方法已被移除:

kubectl get oauth2client "${OIDC_CLIENT_NAME}" -n cpaas-system \
  -o jsonpath='{.codeChallengeMethods}'

输出应为:

["S256"]

对每个受影响的插件(Alauda Container Platform GitopsAlauda Build of KialiKubeflow BaseAlauda AI)至少执行一次登录/授权验证,确认不存在任何与 PKCE 相关的身份验证失败。

回滚

如果在移除 plain 方法后出现身份验证问题(例如,任何受影响插件的登录或授权失败),请将其重新添加:

kubectl patch oauth2client "${OIDC_CLIENT_NAME}" -n cpaas-system \
  --type merge \
  -p '{"codeChallengeMethods":["S256","plain"]}'

回滚后,再次验证受影响插件的登录,然后执行 unset OIDC_CLIENT_NAME