1. 程式人生 > >Ocelot中文文件-管理

Ocelot中文文件-管理

原文: 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欄位設定的內容。