Ocelot中文文件-管理
Ocelot支援在執行時通過一個認證的Http API修改配置。有兩種方式對其驗證, 使用Ocelot的內建IdentityServer(僅用於向管理API驗證請求)或將管理API驗證掛接到您自己的IdentityServer中。
提供你自己的 IdentityServer
掛接到你自己的IdentityServer,你只需要新增一下程式碼到你的ConfigureServices 方法中。
public virtual void ConfigureServices(IServiceCollection services) { Action<IdentityServerAuthenticationOptions> options = o => { // o.Authority = ; // o.ApiName = ; // etc.... }; services .AddOcelot() .AddAdministration("/administration", options); }
您現在需要從你的IdentityServer獲取令牌,並在後續請求Ocelot的管理API時使用。
這個功能是對問題 228 的實現。這個功能很有用,因為IdentityServer認證中介軟體需要IdentityServer的URL。 如果您使用內建IdentityServer,則可能無法獲得Ocelot URL。
內建 IdentityServer
管理API使用您從Ocelot請求的持票人令牌進行身份驗證。這是由我已經使用了幾年的非常了不起的Identity Server專案提供的。 您可以去看一下。
為了啟用管理部分,您需要做一些操作。 首先將此新增到您的初始化檔案Startup.cs中。
管理路徑可以是任何值,顯然不能使用將要通過Ocelot路由的url,因為這是行不通的。管理功能使用asp.net core的MapWhen功能,並且所有到{root} /administration的請求將被髮送到那裡,而不是Ocelot中介軟體。
secret是Ocelot內建IdentityServer用於驗證對管理API請求的客戶端金鑰。你可以隨意填寫!
public virtual void ConfigureServices(IServiceCollection services) { services .AddOcelot() .AddAdministration("/administration", "secret"); }
現在,如果您使用上述配置選項並想要訪問API,可以使用解決方案中名為ocelot.postman_collection.json的postman指令碼來更改Ocelot配置。 顯然,如果Ocelot執行在不同與http://localhost:5000的URL上,則需要改一下。
這些指令碼向您展示瞭如何從ocelot請求bearer令牌,然後使用它來獲取現有配置和修改配置。
如果您在群集中執行多個Ocelot,則需要使用證書對用於訪問管理API的bearer令牌簽名。
為了做到這一點,您需要為叢集中的每個Ocelot再新增兩個的環境變數。
OCELOT_CERTIFICATE
用於簽名令牌的證書路徑。 證書必須是X509型別,顯然Ocelot要能夠訪問它。
OCELOT_CERTIFICATE_PASSWORD
證書的密碼。
通常Ocelot只使用臨時簽名憑證,但如果您設定了這些環境變數,那麼它將使用設定的證書。 如果叢集中的所有其他Ocelot都具有相同的證書,那很棒,這樣就對了!
管理 API
POST {adminPath}/connect/token
這會使用我們上面討論的客戶端證書得到一個用於管理區域的令牌。 在這種情況下,這將呼叫Ocelot中託管的IdentityServer。
請求體是from-data,允許一下資料:
client_id
設定為admin
client_secret
設定為您在設定管理服務時使用的內容
scope
設定為admin
grant_type
設定為client_credentials
GET {adminPath}/configuration
獲得當前的Ocelot配置。 這與我們先前設定Ocelot的JSON完全相同。
POST {adminPath}/configuration
這會覆蓋現有的配置(可能應該是put更合適!)。 我建議用GET獲取您的配置,進行更改後使用此api發回...。
這個請求體的JSON,格式和我們使用檔案系統設定Ocelot的 FileConfiguration.cs格式相同
DELETE {adminPath}/outputcache/{region}
這將清空特定區域的快取。如果您使用空白region,它將清除快取的所有例項!賦予您執行Ocelots叢集,並將其全部快取在記憶體中,並同時清除所有快取(僅使用分散式快取)的能力。
region是您在Ocelot配置的FileCacheOptions部分中針對region欄位設定的內容。