KubeSphere 对接 Keycloak 实践
OIDC 身份提供者
OpenID Connect 是一种基于 OAuth 2.0 系列规范的可互操作的身份认证协议。使用简单的 REST/JSON 消息流,其设计目标是“让简单的事情变得简单,让复杂的事情成为可能”。与之前的任何身份认证协议(例如 Keycloak、Okta、Dex、Auth0、Gluu、Casdoor 等)相比,开发人员集成起来非常容易。
准备工作
您需要部署一个 Kubernetes 集群,并在集群中安装 KubeSphere
步骤
以 admin 身份登录 KubeSphere,将光标移动到右下角 ,点击 kubectl,然后执行以下命令来编辑 CRD ClusterConfiguration 中的 ks-installer :
kubectl -n kubesphere-system edit cc ks-installer
在 spec.authentication.jwtSecret 字段下添加以下字段。
使用Keycloak Configuring realms的示例: clientSecret 、issuer、redirectURL请在最后查看
authentication:
jwtSecret:
oauthOptions:
accessTokenInactivityTimeout: 30m
accessTokenMaxAge: 1h
identityProviders:
- mappingMethod: auto
name: keycloak
provider:
clientID: 10.10.10.110
clientSecret: DApDsGQSO4uFlKbQBG7iPbcGymskC8fi
idTokenSkipVerify: true
issuer: 'https://keycloak.demo.io/auth/realms/demo'
redirectURL: 'http://10.10.10.111:30880/oauth/redirect/keycloak'
scopes:
- openid
- email
- profile
type: OIDCIdentityProvider
字段描述如下:
参数 | 描述 |
---|
clientID | 客户端 ID。 | clientSecret | 客户端密码。 | redirectURL | 重定向到 ks-console 的 URL,格式为:https://<域名>/oauth/redirect/<身份提供者名称> 。URL 中的 <身份提供者名称> 对应 oauthOptions:identityProviders:name 的值。 | issuer | 定义客户端如何动态发现有关 OpenID 提供者的信息。 | preferredUsernameKey | 可配置的密钥,包含首选用户声明。此参数为可选参数。 | emailKey | 可配置的密钥,包含电子邮件声明。此参数为可选参数。 | getUserInfo | 使用 userinfo 端点获取令牌的附加声明。非常适用于上游返回 “thin” ID 令牌的场景。此参数为可选参数。 | insecureSkipVerify | 关闭 TLS 证书验证。 |
console 界面确认配置内容
http://10.10.10.111:30880/kapis/config.kubesphere.io/v1alpha2/configs/oauth
Keycloak Configuring realms
clientSecret 、issuer、redirectURL Keycloak Configuring realms
排错步骤
查看日志
kubectl edit cc -n kubesphere-system ks-installer
kubectl rollout restart -n kubesphere-system deploy ks-installer
kubectl rollout restart -n kubesphere-system deploy ks-apiserver
kubectl -n kubesphere-system logs ks-apiserver-xxxxxxxxx
如果更新没有效果,就查看
github 这种基于 OAuth2 和keycloak不太一样,keycloak 如果配置不对, oidc discovery 会出错了 issuer地址写错,会提醒无法创建 oidc provider 少加realms 这样写https://keycloak.demo.io/auth/demo
错误提示
Could not find resource for full path: https://keycloak.demo.io/auth/demo/.well-known/openid-configuration"}
错误提示
issuer地址写错,只写域名https://keycloak.demo.io
identity_provider.go:64] failed to create identity provider keycloak: failed to create oidc provider: 404 Not Found: <html><head><title>Error</title></head><body>404 - Not Found</body></html>
正确写法
issuer地址写错
issuer: 'https://keycloak.demo.io/auth/realms/demo'
效果展示
|