Skip to content

Commit 0b9b305

Browse files
authored
V1.x develop support naming ak (#518)
* support naming ak
1 parent 56bbfcf commit 0b9b305

File tree

3 files changed

+57
-18
lines changed

3 files changed

+57
-18
lines changed

Diff for: clients/config_client/config_proxy.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ func (cp *ConfigProxy) GetConfigProxy(param vo.ConfigParam, tenant, accessKey, s
5757
}
5858

5959
var headers = map[string]string{}
60-
headers["accessKey"] = accessKey
61-
headers["secretKey"] = secretKey
60+
headers[constant.KEY_ACCESS_KEY] = accessKey
61+
headers[constant.KEY_SECRET_KEY] = secretKey
6262

6363
result, err := cp.nacosServer.ReqConfigApi(constant.CONFIG_PATH, params, headers, http.MethodGet, cp.clientConfig.TimeoutMs)
6464
return result, err

Diff for: clients/naming_client/naming_proxy.go

+17-8
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func (proxy *NamingProxy) RegisterInstance(serviceName string, groupName string,
6666
params["healthy"] = strconv.FormatBool(instance.Healthy)
6767
params["metadata"] = util.ToJsonString(instance.Metadata)
6868
params["ephemeral"] = strconv.FormatBool(instance.Ephemeral)
69-
return proxy.nacosServer.ReqApi(constant.SERVICE_PATH, params, http.MethodPost)
69+
return proxy.nacosServer.ReqApi(constant.SERVICE_PATH, params, http.MethodPost, proxy.getSecurityMap())
7070
}
7171

7272
func (proxy *NamingProxy) DeregisterInstance(serviceName string, ip string, port uint64, clusterName string, ephemeral bool) (string, error) {
@@ -79,7 +79,7 @@ func (proxy *NamingProxy) DeregisterInstance(serviceName string, ip string, port
7979
params["ip"] = ip
8080
params["port"] = strconv.Itoa(int(port))
8181
params["ephemeral"] = strconv.FormatBool(ephemeral)
82-
return proxy.nacosServer.ReqApi(constant.SERVICE_PATH, params, http.MethodDelete)
82+
return proxy.nacosServer.ReqApi(constant.SERVICE_PATH, params, http.MethodDelete, proxy.getSecurityMap())
8383
}
8484

8585
func (proxy *NamingProxy) UpdateInstance(serviceName string, ip string, port uint64, clusterName string, ephemeral bool, weight float64, enable bool, metadata map[string]string) (string, error) {
@@ -95,7 +95,7 @@ func (proxy *NamingProxy) UpdateInstance(serviceName string, ip string, port uin
9595
params["weight"] = strconv.FormatFloat(weight, 'f', -1, 64)
9696
params["enable"] = strconv.FormatBool(enable)
9797
params["metadata"] = util.ToJsonString(metadata)
98-
return proxy.nacosServer.ReqApi(constant.SERVICE_PATH, params, http.MethodPut)
98+
return proxy.nacosServer.ReqApi(constant.SERVICE_PATH, params, http.MethodPut, proxy.getSecurityMap())
9999
}
100100

101101
func (proxy *NamingProxy) SendBeat(info *model.BeatInfo) (int64, error) {
@@ -107,7 +107,7 @@ func (proxy *NamingProxy) SendBeat(info *model.BeatInfo) (int64, error) {
107107
params["serviceName"] = info.ServiceName
108108
params["beat"] = util.ToJsonString(info)
109109
api := constant.SERVICE_BASE_PATH + "/instance/beat"
110-
result, err := proxy.nacosServer.ReqApi(api, params, http.MethodPut)
110+
result, err := proxy.nacosServer.ReqApi(api, params, http.MethodPut, proxy.getSecurityMap())
111111
if err != nil {
112112
return 0, err
113113
}
@@ -138,7 +138,7 @@ func (proxy *NamingProxy) GetServiceList(pageNo int, pageSize int, groupName str
138138
}
139139

140140
api := constant.SERVICE_BASE_PATH + "/service/list"
141-
result, err := proxy.nacosServer.ReqApi(api, params, http.MethodGet)
141+
result, err := proxy.nacosServer.ReqApi(api, params, http.MethodGet, proxy.getSecurityMap())
142142
if err != nil {
143143
return nil, err
144144
}
@@ -165,7 +165,7 @@ func (proxy *NamingProxy) GetServiceList(pageNo int, pageSize int, groupName str
165165

166166
func (proxy *NamingProxy) ServerHealthy() bool {
167167
api := constant.SERVICE_BASE_PATH + "/operator/metrics"
168-
result, err := proxy.nacosServer.ReqApi(api, map[string]string{}, http.MethodGet)
168+
result, err := proxy.nacosServer.ReqApi(api, map[string]string{}, http.MethodGet, proxy.getSecurityMap())
169169
if err != nil {
170170
logger.Errorf("namespaceId:[%s] sending server healthy failed!,result:%s error:%+v", proxy.clientConfig.NamespaceId, result, err)
171171
return false
@@ -191,7 +191,7 @@ func (proxy *NamingProxy) QueryList(serviceName string, clusters string, udpPort
191191
param["healthyOnly"] = strconv.FormatBool(healthyOnly)
192192
param["clientIP"] = util.LocalIP()
193193
api := constant.SERVICE_PATH + "/list"
194-
return proxy.nacosServer.ReqApi(api, param, http.MethodGet)
194+
return proxy.nacosServer.ReqApi(api, param, http.MethodGet, proxy.getSecurityMap())
195195
}
196196

197197
func (proxy *NamingProxy) GetAllServiceInfoList(namespace, groupName string, pageNo, pageSize uint32) (string, error) {
@@ -201,5 +201,14 @@ func (proxy *NamingProxy) GetAllServiceInfoList(namespace, groupName string, pag
201201
param["pageNo"] = strconv.Itoa(int(pageNo))
202202
param["pageSize"] = strconv.Itoa(int(pageSize))
203203
api := constant.SERVICE_INFO_PATH + "/list"
204-
return proxy.nacosServer.ReqApi(api, param, http.MethodGet)
204+
return proxy.nacosServer.ReqApi(api, param, http.MethodGet, proxy.getSecurityMap())
205+
}
206+
207+
func (proxy *NamingProxy) getSecurityMap() map[string]string {
208+
result := make(map[string]string, 2)
209+
if len(proxy.clientConfig.AccessKey) != 0 && len(proxy.clientConfig.SecretKey) != 0 {
210+
result[constant.KEY_ACCESS_KEY] = proxy.clientConfig.AccessKey
211+
result[constant.KEY_SECRET_KEY] = proxy.clientConfig.SecretKey
212+
}
213+
return result
205214
}

Diff for: common/nacos_server/nacos_server.go

+38-8
Original file line numberDiff line numberDiff line change
@@ -132,14 +132,19 @@ func (server *NacosServer) callConfigServer(api string, params map[string]string
132132
}
133133
}
134134

135-
func (server *NacosServer) callServer(api string, params map[string]string, method string, curServer string, contextPath string) (result string, err error) {
135+
func (server *NacosServer) callServer(api string, params map[string]string, header map[string]string, method string, curServer string, contextPath string) (result string, err error) {
136136
if contextPath == "" {
137137
contextPath = constant.WEB_CONTEXT
138138
}
139139

140140
url := curServer + contextPath + api
141141

142-
headers := map[string][]string{}
142+
headers := make(map[string][]string, len(header))
143+
for k, v := range header {
144+
if k != constant.KEY_SECRET_KEY {
145+
headers[k] = []string{v}
146+
}
147+
}
143148
headers["Client-Version"] = []string{constant.CLIENT_VERSION}
144149
headers["User-Agent"] = []string{constant.CLIENT_VERSION}
145150
//headers["Accept-Encoding"] = []string{"gzip,deflate,sdch"}
@@ -209,7 +214,7 @@ func (server *NacosServer) ReqConfigApi(api string, params map[string]string, he
209214
}
210215
}
211216

212-
func (server *NacosServer) ReqApi(api string, params map[string]string, method string) (string, error) {
217+
func (server *NacosServer) ReqApi(api string, params map[string]string, method string, security map[string]string) (string, error) {
213218
srvs := server.serverList
214219
if srvs == nil || len(srvs) == 0 {
215220
return "", errors.New("server list is empty")
@@ -219,25 +224,25 @@ func (server *NacosServer) ReqApi(api string, params map[string]string, method s
219224
err error
220225
)
221226
injectSecurityInfo(server, params)
222-
227+
signHeader := getSignHeadersForNaming(params, security)
223228
//only one server,retry request when error
224229
if len(srvs) == 1 {
225230
for i := 0; i < constant.REQUEST_DOMAIN_RETRY_TIME; i++ {
226-
result, err = server.callServer(api, params, method, getAddress(srvs[0]), srvs[0].ContextPath)
231+
result, err = server.callServer(api, params, signHeader, method, getAddress(srvs[0]), srvs[0].ContextPath)
227232
if err == nil {
228233
return result, nil
229234
}
230-
logger.Errorf("api<%s>,method:<%s>, params:<%s>, call domain error:<%+v> , result:<%s>", api, method, util.ToJsonString(params), err, result)
235+
logger.Errorf("api<%s>,method:<%s>, params:<%s>, header:<%s>, call domain error:<%+v> , result:<%s>", api, method, util.ToJsonString(params), util.ToJsonString(signHeader), err, result)
231236
}
232237
} else {
233238
index := rand.Intn(len(srvs))
234239
for i := 1; i <= len(srvs); i++ {
235240
curServer := srvs[index]
236-
result, err = server.callServer(api, params, method, getAddress(curServer), curServer.ContextPath)
241+
result, err = server.callServer(api, params, signHeader, method, getAddress(curServer), curServer.ContextPath)
237242
if err == nil {
238243
return result, nil
239244
}
240-
logger.Errorf("api<%s>,method:<%s>, params:<%s>, call domain error:<%+v> , result:<%s>", api, method, util.ToJsonString(params), err, result)
245+
logger.Errorf("api<%s>,method:<%s>, params:<%s>, header:<%s>, call domain error:<%+v> , result:<%s>", api, method, util.ToJsonString(params), util.ToJsonString(signHeader), err, result)
241246
index = (index + i) % len(srvs)
242247
}
243248
}
@@ -348,6 +353,31 @@ func getSignHeaders(params map[string]string, newHeaders map[string]string) map[
348353
return headers
349354
}
350355

356+
func getSignHeadersForNaming(params map[string]string, newHeaders map[string]string) map[string]string {
357+
accessKey, containAk := newHeaders[constant.KEY_ACCESS_KEY]
358+
secretKey, containSk := newHeaders[constant.KEY_SECRET_KEY]
359+
result := map[string]string{}
360+
if !containAk || !containSk {
361+
return result
362+
}
363+
var signData string
364+
timeStamp := strconv.FormatInt(time.Now().UnixNano()/1e6, 10)
365+
if serviceName, ok := params["serviceName"]; ok {
366+
if groupName, containGroup := params["groupName"]; strings.Contains(serviceName, constant.SERVICE_INFO_SPLITER) ||
367+
!containGroup {
368+
signData = timeStamp + constant.SERVICE_INFO_SPLITER + serviceName
369+
} else {
370+
signData = timeStamp + constant.SERVICE_INFO_SPLITER + util.GetGroupName(serviceName, groupName)
371+
}
372+
} else {
373+
signData = timeStamp
374+
}
375+
result["signature"] = signWithhmacSHA1Encrypt(signData, secretKey)
376+
result["ak"] = accessKey
377+
result["data"] = signData
378+
return result
379+
}
380+
351381
func signWithhmacSHA1Encrypt(encryptText, encryptKey string) string {
352382
//hmac ,use sha1
353383
key := []byte(encryptKey)

0 commit comments

Comments
 (0)