為了驗證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訪問的方式。