ocelot自定义认证token
中间件
public class CustomOcelotMiddleware : Ocelot.Middleware.OcelotMiddleware
{
private readonly RequestDelegate _next;
public IConfiguration _configuration;
private readonly IAuth _authUtil;
private readonly SysLogApp _logApp;
private readonly RemoteAccountService _remoterService;
/// <summary>
///
/// </summary>
/// <param name="next"></param>
/// <param name="configuration"></param>
/// <param name="responder"></param>
/// <param name="authUtil"></param>
/// <param name="logApp"></param>
/// <param name="remoterService"></param>
/// <param name="loggerFactory"></param>
public CustomOcelotMiddleware(RequestDelegate next, IConfiguration configuration, IAuth authUtil, SysLogApp logApp, RemoteAccountService remoterService, IOcelotLoggerFactory loggerFactory) : base(loggerFactory.CreateLogger<CustomOcelotMiddleware>())
{
_next = next;
_configuration = configuration;
_authUtil = authUtil;
_remoterService = remoterService;
_logApp = logApp;
}
/// <summary>
///
/// </summary>
/// <param name="httpContext"></param>
/// <returns></returns>
public async Task Invoke(HttpContext httpContext)
{
//验证token
if (!_authUtil.CheckLogin())
{
httpContext.Response.ContentType = "text/plain; charset=utf-8";
httpContext.Response.StatusCode = 401;
await httpContext.Response.WriteAsync("认证失败,请提供认证信息", Encoding.UTF8);
return;
}
await _next.Invoke(httpContext);
}
}
使用
app.UseMiddleware<CustomOcelotMiddleware>(); //后台默认登陆,远程登录用来做普通账号核远程服务的通信,方便实现普通用户查看客户池等相关功能。 var task = remoterService.RemoteLogin(); app.UseOcelot().Wait();
最后验证

替换当前token为调用的下级api的token,也可以在上面那个中间件写
public class RequestAuthoritarianHandler : DelegatingHandler { private readonly RemoteAccountService _remoterService; /// <summary> /// /// </summary> public RequestAuthoritarianHandler(RemoteAccountService remoteAccountService) { _remoterService = remoteAccountService; } /// <summary> /// /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { var newValue = await _remoterService.GetRemoteAuthorization(); request.Headers.Remove(HeaderAuthenticationDefaults.AuthenticationSchema); request.Headers.Add(HeaderAuthenticationDefaults.AuthenticationSchema, newValue); var result = await base.SendAsync(request, cancellationToken); return result; } }
使用在
services.AddOcelot(Configuration) .AddConsul() .AddDelegatingHandler<RequestAuthoritarianHandler>(true);

浙公网安备 33010602011771号