Ocelot中文文件-認證

loogn發表於2018-05-08

為了驗證ReRoutes並隨後使用Ocelot的任何基於宣告的功能,如授權或使用令牌中的值修改請求。 使用者必須像往常一樣在他們的Startup.cs中註冊認證服務,但他們給每個註冊提供了一個方案(認證提供商金鑰),例如

public void ConfigureServices(IServiceCollection services)
{
    var authenticationProviderKey = "TestKey";

    services.AddAuthentication()
        .AddJwtBearer(authenticationProviderKey, x =>
        {
        });
}

在此示例中,TestKey是此提供程式已註冊的方案。 然後,我們將其對映到配置中的ReRoute,例如


"ReRoutes": [{
        "DownstreamHostAndPorts": [
            {
                "Host": "localhost",
                "Port": 51876,
            }
        ],
        "DownstreamPathTemplate": "/",
        "UpstreamPathTemplate": "/",
        "UpstreamHttpMethod": ["Post"],
        "ReRouteIsCaseSensitive": false,
        "DownstreamScheme": "http",
        "AuthenticationOptions": {
            "AuthenticationProviderKey": "TestKey",
            "AllowedScopes": []
        }
    }]

當Ocelot執行時,它會檢視此ReRoutes的AuthenticationOptions.AuthenticationProviderKey並檢查是否存在給定金鑰註冊的身份驗證提供程式。 如果沒有,那麼Ocelot不會啟動,如果有的話ReRoute將在執行時使用該提供者。

如果ReRoute配置了認證,Ocelot在執行認證中介軟體時將呼叫與其相關的任何驗證方案。 如果請求認證失敗,Ocelot返回http狀態碼401。

JWT令牌

如果您想使用JWT令牌進行身份驗證,例如Auth0等提供商,您可以使用正常的方式註冊你的身份驗證中介軟體。

public void ConfigureServices(IServiceCollection services)
{
    var authenticationProviderKey = "TestKey";

    services.AddAuthentication()
        .AddJwtBearer(authenticationProviderKey, x =>
        {
            x.Authority = "test";
            x.Audience = "test";
        });

    services.AddOcelot();
}

然後將身份驗證提供程式金鑰對映到配置中的ReRoute,例如

"ReRoutes": [{
        "DownstreamHostAndPorts": [
            {
                "Host": "localhost",
                "Port": 51876,
            }
        ],
        "DownstreamPathTemplate": "/",
        "UpstreamPathTemplate": "/",
        "UpstreamHttpMethod": ["Post"],
        "ReRouteIsCaseSensitive": false,
        "DownstreamScheme": "http",
        "AuthenticationOptions": {
            "AuthenticationProviderKey": "TestKey",
            "AllowedScopes": []
        }
    }]

Identity Server 承載令牌

為了使用IdentityServer承載令牌,請按照慣例在ConfigureServices 中使用方案(金鑰)註冊您的IdentityServer服務。 如果您不明白如何操作,請訪問IdentityServer文件。

public void ConfigureServices(IServiceCollection services)
{
    var authenticationProviderKey = "TestKey";
    var options = o =>
        {
            o.Authority = "https://whereyouridentityserverlives.com";
            o.ApiName = "api";
            o.SupportedTokens = SupportedTokens.Both;
            o.ApiSecret = "secret";
        };

    services.AddAuthentication()
        .AddIdentityServerAuthentication(authenticationProviderKey, options);

    services.AddOcelot();
}

然後將身份驗證提供程式金鑰對映到配置中的ReRoute,例如

"ReRoutes": [{
        "DownstreamHostAndPorts": [
            {
                "Host": "localhost",
                "Port": 51876,
            }
        ],
        "DownstreamPathTemplate": "/",
        "UpstreamPathTemplate": "/",
        "UpstreamHttpMethod": ["Post"],
        "ReRouteIsCaseSensitive": false,
        "DownstreamScheme": "http",
        "AuthenticationOptions": {
            "AuthenticationProviderKey": "TestKey",
            "AllowedScopes": []
        }
    }]

允許的範圍

如果將範圍新增到AllowedScopes,Ocelot將獲得型別範圍的所有使用者宣告(從令牌中),並確保使用者具有列表中的所有範圍。

這是一種基於範圍限制對ReRoute訪問的方式。

相關文章