Skip to content

Commit b56b7f6

Browse files
committed
Add description of external authentication interface.
1 parent 09d668f commit b56b7f6

File tree

1 file changed

+118
-0
lines changed
  • sites/extension-dev-guide/content/zh/feature-customization/webhook-authentication

1 file changed

+118
-0
lines changed
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
---
2+
title: Webhook外部鉴权
3+
weight: 09
4+
description: "以Webhook的方式完成外部鉴权"
5+
---
6+
7+
KubeSphere 企业版支持设置外部身份验证,平台管理员可以通过 secret(保密字典)配置身份提供者。KubeSphere提供两种不同方式的webhook鉴权,分别为提供密码的外部鉴权方式GenericWebhookIdentityProvider,与跳转外部token提供接口以获取token的鉴权方式OAuthWebhookIdentityProvider。
8+
9+
### 什么是 GenericWebhookIdentityProvider:
10+
11+
GenericWebhookIdentityProvider鉴权是基于webhook实现的身份验证机制,用户输入账号密码后,KubeSphere将信息打包以webhook加密发送给外部鉴权api,外部鉴权api鉴定完成后返回结果并附带唯一id确保用户正确,全程使用加密算法结合一个密钥对请求的主体数据Provider 通过 webhook进行签名计算。
12+
13+
### 什么是 OAuthWebhookIdentityProvider:
14+
15+
OAuthWebhookIdentityProvider鉴权是以 OAuth协议为基础并结合了 webhook 技术的鉴权机制,OAuth 是一种常见的用于授权的开放标准协议,而引入 webhook 后,可以实现一些特定的回调和事件触发机制,用于外部鉴权时可在外部调用ks登录鉴权时进行响应,也具备OAuth的获取用户授权码等信息,然后将这些信息与 webhook 相关数据一起发送给 Provider 进行后续处理
16+
17+
18+
### OAuthWebhookIdentityProvider 配置示例:
19+
20+
```yaml
21+
apiVersion: v1
22+
kind: Secret
23+
metadata:
24+
namespace: kubesphere-system
25+
#name为ks资源注册名称,字母需全小写并以“-”隔开,建议命名方式为provider名称-config
26+
name: identity-provider-config
27+
labels:
28+
config.kubesphere.io/type: identityprovider
29+
stringData:
30+
configuration.yaml: |
31+
#name为provider名称,如有版本升级用户导入场景需要与被导入用户labels中名称一致
32+
name: oauthwebhook
33+
type: OAuthWebhookIdentityProvider
34+
mappingMethod: auto
35+
# 前端登录选项是否隐藏
36+
hidden : false
37+
# 是否禁用该登录方式
38+
disabled: false
39+
# 登录方式别名
40+
displayName: ""
41+
provider:
42+
#用于认证的 API 地址
43+
authURL: "'"
44+
#用于响应token的API 地址
45+
tokenURL: ""
46+
readTimeout: 5000
47+
insecureSkipVerify: true
48+
rootCA: ""
49+
rootCAData: ""
50+
type: config.kubesphere.io/identityprovider
51+
```
52+
53+
### GenericWebhookIdentityProvider 配置示例:
54+
```yaml
55+
apiVersion: v1
56+
kind: Secret
57+
metadata:
58+
namespace: kubesphere-system
59+
#name为ks资源注册名称,字母需全小写并以“-”隔开,,建议命名方式为provider名称-config
60+
name: identity-provider-config
61+
labels:
62+
config.kubesphere.io/type: identityprovider
63+
stringData:
64+
configuration.yaml: |
65+
#name为provider名称,如有版本升级用户导入场景需要与被导入用户labels中名称一致
66+
name: generic-webhook
67+
type: GenericWebhookIdentityProvider
68+
mappingMethod: auto
69+
# 前端登录选项是否隐藏
70+
hidden : false
71+
# 是否禁用该登录方式
72+
disabled: false
73+
# 登录方式别名
74+
displayName: ""
75+
provider:
76+
# 用于认证的 API 地址
77+
authURL: "'"
78+
readTimeout: 5000
79+
insecureSkipVerify: true
80+
rootCA: ""
81+
rootCAData: ""
82+
type: config.kubesphere.io/identityprovider
83+
```
84+
85+
### 用于认证的 API 规范:
86+
87+
88+
需响应请求,返回用户的关键信息与本次查询结果
89+
GenericWebhookIdentityProvider 对应api:AuthURL应能接受(username, password),返回连接结果、uid、username、email
90+
OAuthWebhookIdentityProvider 对应api:TokenURL应能接受GET请求发送的URL.token和其他鉴权信息并返回连接结果、uid、username、email。AuthURL应为能获取鉴权token链接,并返回给ks前端
91+
92+
api接口示例:
93+
```go
94+
r.POST("/authenticate", func(c *gin.Context) {
95+
var user User
96+
if err := c.BindJSON(&user); err != nil {
97+
c.JSON(http.StatusBadRequest, err)
98+
}
99+
userInfo, err := unifieduserplatform.Authenticate(user.Username, user.Password) #外部用户密码鉴权接口调用
100+
if err != nil {
101+
c.JSON(http.StatusBadRequest, err) #异常报错
102+
} else {
103+
c.JSON(http.StatusOK, gin.H{"uid": strconv.Itoa(userInfo.ID), "username": userInfo.UserName, "email": userInfo.Email}) #结果回传
104+
}
105+
})
106+
r.GET("/oauth/redirect/aiuap", func(c *gin.Context) {
107+
token := c.Query("token")
108+
appAcctId := c.Query("appAcctId")
109+
fmt.Println(token)
110+
fmt.Println(appAcctId)
111+
userInfo, err := aiuap.IdentityExchangeCallback(token, appAcctId) #外部tokern接口鉴权调用
112+
if err != nil {
113+
c.JSON(http.StatusBadRequest, err) #异常报错
114+
} else {
115+
c.JSON(http.StatusOK, gin.H{"uid": userInfo.Id, "username": userInfo.Username, "email": userInfo.Email}) #异常报错
116+
}
117+
})
118+
```

0 commit comments

Comments
 (0)