Ocelot支持在運行時經過一個認證的Http API修改配置。有兩種方式對其驗證, 使用Ocelot的內置IdentityServer(僅用於向管理API驗證請求)或將管理API驗證掛接到您本身的IdentityServer中。html
掛接到你本身的IdentityServer,你只須要添加一下代碼到你的ConfigureServices 方法中。git
public virtual void ConfigureServices(IServiceCollection services) { Action<IdentityServerAuthenticationOptions> options = o => { // o.Authority = ; // o.ApiName = ; // etc.... }; services .AddOcelot() .AddAdministration("/administration", options); }
您如今須要從你的IdentityServer獲取令牌,並在後續請求Ocelot的管理API時使用。github
這個功能是對問題 228 的實現。這個功能頗有用,由於IdentityServer認證中間件須要IdentityServer的URL。 若是您使用內置IdentityServer,則可能沒法得到Ocelot URL。json
管理API使用您從Ocelot請求的持票人令牌進行身份驗證。這是由我已經使用了幾年的很是了不得的Identity Server項目提供的。 您能夠去看一下。api
爲了啓用管理部分,您須要作一些操做。 首先將此添加到您的初始化文件Startup.cs中。緩存
管理路徑能夠是任何值,顯然不能使用將要經過Ocelot路由的url,由於這是行不通的。管理功能使用asp.net core的MapWhen功能,而且全部到{root} /administration的請求將被髮送到那裏,而不是Ocelot中間件。asp.net
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上,則須要改一下。ide
這些腳本向您展現瞭如何從ocelot請求bearer令牌,而後使用它來獲取現有配置和修改配置。post
若是您在羣集中運行多個Ocelot,則須要使用證書對用於訪問管理API的bearer令牌簽名。
爲了作到這一點,您須要爲集羣中的每一個Ocelot再添加兩個的環境變量。
OCELOT_CERTIFICATE
用於簽名令牌的證書路徑。 證書必須是X509類型,顯然Ocelot要可以訪問它。
OCELOT_CERTIFICATE_PASSWORD
證書的密碼。
一般Ocelot只使用臨時簽名憑證,但若是您設置了這些環境變量,那麼它將使用設置的證書。 若是集羣中的全部其餘Ocelot都具備相同的證書,那很棒,這樣就對了!
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字段設置的內容。