如何修改 Token 的有效时间
Token 的配置可以参考入口:https://github.com/kubesphere/kubesphere/blob/v3.0.0/pkg/apiserver/authentication/options/authenticate_options.go#L72
在 OAuthOptions 对象中定义了相关参数:https://github.com/kubesphere/kubesphere/blob/v3.0.0/pkg/apiserver/authentication/oauth/oauth_options.go#L53
编辑 kubesphere-config 文件,可以修改配置。如下:
kubectl -n kubesphere-system get cm kubesphere-config -o yaml
apiVersion: v1
data:
kubesphere.yaml: |
authentication:
authenticateRateLimiterMaxTries: 10
authenticateRateLimiterDuration: 10m0s
loginHistoryRetentionPeriod: 168h
maximumClockSkew: 10s
multipleLogin: True
kubectlImage: kubesphere/kubectl:v1.17.0
jwtSecret: "25Rcrd5ohXwUl6FiZCAtx1zG7LUN5dBK"
oauthOptions:
accessTokenMaxAge: 24h
...
这里修改 oauthOptions 中的 accessTokenMaxAge 字段,即可修改 token 的有效期。不配置时,默认是 24 小时。
如何生成永久有效的 Token
Token 是区分类型的,除了通常使用的 access_token
,还有 static_token
。代码链接:
https://github.com/kubesphere/kubesphere/blob/v3.0.0/pkg/apiserver/authentication/token/issuer.go#L30
判断逻辑: https://github.com/kubesphere/kubesphere/blob/v3.0.0/pkg/models/iam/im/token.go#L60
下面是 @hongming 提供的生成永久 token 的脚本:
- 获取 jwtSecret
kubectl -n kubesphere-system get cc ks-installer -o yaml | grep jwtSecret
xxxxx
- 查询 ks-installer 的 pod 名字
kubectl -n kubesphere-system get pod -l app=ks-install
NAME READY STATUS RESTARTS AGE
ks-installer-75b96b8f7f-rnqvd 1/1 Running 0 2d4h
- 进入 ks-installer
kubectl -n kubesphere-system exec -it ks-installer-75b96b8f7f-rnqvd sh
- 拷贝生成脚本
cp ./installer/roles/ks-core/init-token/files/jwt-script/jwt.sh ./jwt2.sh
- 生成 Token
需要先将第 1 步获取的 jwtSecret 设置为环境变量。
export JWT_SECRET=xxxx
bash jwt2.sh $JWT_SECRET '{"email": "admin@kubesphere.io","username": "admin","token_type": "static_token"}'
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..YLZM9cHIzkpbvWz4PXDTU037ehZ6hYQFhz0zEhDR2M4
如何通过 API 生成 Token
参考文档,最底部有 Python 示例。https://kubesphere.com.cn/forum/d/1163-kubesphere-devops-s2i-b2i-api