本文介紹Ocelot中的配置管理,配置管理允許在Api閘道器執行時動態透過Http Api檢視/修改當前配置。由於該功能許可權很高,所以需要授權才能進行相關操作。有兩種方式來認證,外部Identity Server或內部Identity Server。
1、外部Identity Server
修改 Startup
中的 ConfigureServices
方法如下:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
void options(IdentityServerAuthenticationOptions o)
{
o.Authority = "http://localhost:6000";
o.RequireHttpsMetadata = false;
o.ApiName = "api1";
}
services
.AddOcelot(new ConfigurationBuilder()
.AddJsonFile("configuration.json")
.Build())
.AddAdministration("/administration", options);
services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddIdentityServerAuthentication("TestKey", options);
}
其中復用了Identity Server的配置。
2、內部Identity Server
修改 Startup
中的 ConfigureServices
方法如下:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddOcelot(new ConfigurationBuilder()
.AddJsonFile("configuration.json")
.Build())
.AddAdministration("/administration", "secret");
services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddIdentityServerAuthentication("TestKey", options =>
{
options.Authority = "http://localhost:6000";
options.RequireHttpsMetadata = false;
options.ApiName = "api1";
});
}
其中為secret值為”secret”,後邊會用得到。
其上為新增配置管理的兩種方式,本例中以內部Identity Server為例。
Administration一共提供了3組Api
- Token獲取
- 配置管理
- 快取管理
其中Token獲取Api只在使用內部Identity Server時有效。由於快取的教程還沒更新,所以快取管理的Api在後邊的文章介紹。
1、Token獲取
使用Postman請求http://localhost:5000/administration/connect/token如下所示,可以獲得一個token
token from internal id server.png
註意Body的資料型別要選擇 form-data
,並且 client_secret
要填寫程式碼中配置的secret,當前教程為secret。
2、配置管理
使用Postman請求http://localhost:5000/administration/configuration如下所示,獲取配置
get configuration.png
使用上次獲取的token。
以http://localhost:5000/GetUserInfo?name=Jonathan為例請求資料如下
GetUserInfo.png
可以成功請求並且獲取資料。
然後修改配置如下
change configuration.png
註意此次請求為Post請求,並且不要忘記新增認證頭token,此次請求的body引數為之前獲取的配置並且修改了/GetUserInfo連結為/GetUserInfochanged。
再次使用Postman請求http://localhost:5000/GetUserInfo?name=Jonathan如下
GetUserInfo 404.png
得到了404,修改連結為http://localhost:5000/GetUserInfochanged?name=Jonathan再次請求如下
GetUserInfochanged.png
此次配置修改成功,開啟到路徑/OcelotTutorial/OcelotGetway/bin/Debug/netcoreapp2.0下有一個 configuration.Development.json
檔案開啟檢視如下
configuration.Development.json.png
配置檔案也已經修改。
可能在開發時會遇到修改完配置之後,下次除錯時配置又回到了原來,是因為 configuration.json
選擇成了總是複製,所以每次開始除錯的時候都會替換 configuration.development.json
中的內容。
如果Ocelot Api閘道器程式沒有讀寫檔案的許可權也會遇到修改配置失敗的情況。
原文地址:https://www.jianshu.com/p/9e2fa5783211