开启鉴权后通过Open API获取配置的步骤:
- 首先需要使用用户名和密码登陆nacos。
curl -X POST '127.0.0.1:8848/nacos/v1/auth/login' -d 'username=nacos&password=nacos'
若用户名和密码正确,返回信息如下:
{"accessToken":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTYwNTYyOTE2Nn0.2TogGhhr11_vLEjqKko1HJHUJEmsPuCxkur-CfNojDo","tokenTtl":18000,"globalAdmin":true}
- 接下来进行配置信息或服务信息时,应当使用该accessToken鉴权,在url后添加参数accessToken= a c c e s s T o k e n , 其中 {accessToken},其中 accessToken,其中{accessToken}为登录时返回的token信息,例如
v2版本的API(推荐):
curl -X GET '127.0.0.1:8848/nacos/v2/cs/config?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTYwNTYyMzkyM30.O-s2yWfDSUZ7Svd3Vs7jy9tsfDNHs1SuebJB4KlNY8Q&dataId=nacos.example.1&group=nacos_group'
- C#实现:
var cfgSvr = localCfg.ConfigServer;
string tokenstr = string.Empty;
// POST
{
string url = string.Format($"http://{cfgSvr.Host}:{cfgSvr.Port}/nacos/v1/auth/login");
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
StringBuilder builder = new StringBuilder();
builder.AppendFormat("{0}={1}", "username", "nacos");
builder.Append("&");
builder.AppendFormat("{0}={1}", "password", "nacos");
log.LogInfo("http post data:" + builder.ToString());
byte[] data = Encoding.UTF8.GetBytes(builder.ToString());
request.ContentLength = data.Length;
using (Stream reqStream = request.GetRequestStream())
{
reqStream.Write(data, 0, data.Length);
reqStream.Close();
}
using (var response = (HttpWebResponse)request.GetResponse())
{
using (var reader = new StreamReader(response.GetResponseStream()))
{
var content = reader.ReadToEnd();
log.LogInfo("http response stream:" + content);
JObject jObj = JObject.Parse(content);
JToken accessToken = jObj["accessToken"];
tokenstr = accessToken.ToString();
}
}
}
log.LogInfo("Nacos config tokenstr: " + tokenstr);
// GET
{
string dataid = cfgSvr.DataId;
if (string.IsNullOrWhiteSpace(dataid))
{
dataid = "ClientConfig.json"; // default
}
string namespaceId = cfgSvr.Namespace;
if (string.IsNullOrWhiteSpace(namespaceId))
{
namespaceId = "public"; // default
}
string url = string.Format($"http://{cfgSvr.Host}:{cfgSvr.Port}/nacos/v2/cs/config?dataId={dataid}&group={cfgSvr.Group}&namespaceId={namespaceId}&accessToken={tokenstr}");
log.LogInfo("Nacos url: " + url);
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
string rspStr = string.Empty;
using (var response = (HttpWebResponse)request.GetResponse())
{
using (var reader = new StreamReader(response.GetResponseStream()))
{
rspStr = reader.ReadToEnd();
}
}
//log.LogInfo("nacos get stream:" + rspStr);
JObject jObj = JObject.Parse(rspStr);
JToken dataToken = jObj["data"];
var datastr = dataToken.ToString();
log.LogInfo("nacos get datastr:\n" + datastr);
cfg = new ClientConfig();
cfg = JsonConvert.DeserializeObject<ClientConfig>(datastr);
log.LogInfo("init config from nacos");
}