Ocelot中文文档-管理(转)
原文地址:https://www.cnblogs.com/loogn/p/9007812.html
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字段设置的内容。