首页 > 其他分享 >ocelot自定义认证token

ocelot自定义认证token

时间:2024-05-27 15:13:33浏览次数:9  
标签:authUtil 自定义 private token ocelot httpContext remoterService public

中间件

 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);

 

标签:authUtil,自定义,private,token,ocelot,httpContext,remoterService,public
From: https://www.cnblogs.com/shuaimeng/p/18215535

相关文章

  • 警惕!自定义注解使用不当的排查实录
    一、引言大家好,在日常开发过程中,Java注解(Annotation)是开发中经常使用的一个手段,用于给代码添加元数据的标记。它们可以提供代码额外的信息,这些信息可以在编译时或运行时被访问。注解不会改变代码的执行逻辑,但可以被编译器、JVM或框架等工具用于生成额外的代码、提供警告或执......
  • custom:用户自定义插件,提供开放能力
    custom插件的功能:支持用户在右键菜单中自定义插件。简介custom插件大量采用声明式代码(声明代替代码开发),比如:只需使用style=()=>"...",即可注册css。只需使用styleTemplate=()=>({renderArg}),即可引入css文件,并且支持渲染模板。只需使用html=()=>"...",即......
  • Vue3标签组件绘制--自定义按钮组件
    不知道怎么的,突然想绘制一个标签,比如el-button什么的。今天研究一下吧,不知道能不能整出来以后就可以绘制自己的组件,弄自己的组件库了。不知道有朝一日能不能让越组件青史留名?嘻嘻,百日梦做差不多了,接着去查查资料。文章分为三个部分:1.按钮组件实现(根据查阅的一个文章实现基......
  • 一起学习大模型 - 从底层了解Token Embeddings的原理(2)
    文章目录前言4.TokenEmbeddings综合运用演示4.1TokenEmbeddings处理4.2伪代码示例4.3计算cat和dog两个词的相近程序4.3.1计算方法4.3.2例子4.3.3输出结果前言上一篇文章了解了TokenEmbeddings的原理,这一篇,我们一起来综合运用学到的知识来深入了解Token......
  • 什么是Token?为什么大模型要计算Token数
    本文分享自华为云社区《【技术分享】什么是Token?为什么GPT基于Token定价》,作者:开天aPaaS小助手Tracy。在使用LLM大模型时,我们经常会遇到一个关键词,叫:Token。比如:最新版GPT-4Turbo模型最高支持128ktoken上下文;曾经GPT最强对手Claude-2.1支持最高200Ktoken上下文;......
  • 【C语言】自定义类型:联合与枚举的简明概述
    ......
  • Qt QListWidget 存放自定义控件不显示问题
    问题软件功能:每点击一次新建按钮,在QListWidget新增一行自定义控件,主窗口和自定义窗口如下。主窗口:自定义窗口问题代码:Form*myform=newForm();QListWidgetItem*item=newQListWidgetItem(ui->listWidget);ui->listWidget->addItem(item);......
  • 这个让ChatGPT变强的功能还有多少人不知道(自定义ChatGPT)!
    ChatGPT已经成为许多人日常生活和工作中的重要工具。为了更好地满足用户的个性化需求,ChatGPT推出了自定义功能。但是最近我发现很多同学因为嫌麻烦或者不知道怎么写,就没有使用过这个功能,也有些同学都不知道这个功能。所以今天我就来科普一下怎么使用这个功能使你的ChatGPT......
  • 一起来聊聊大模型的token
    文章目录前言一、token是什么二、常用分词方法三、GPT-3的分词方式1.代码示例2.`Ġworld`和`world`的区别1)分词中的空格前缀2)后续计算中的区别3.为什么使用子词分词总结前言学习大模型的朋友肯定听说过大模型接口按token,自己编写代码的时候也经常看到tok......
  • 自定义类型:联合和枚举
    目录1.联合体1.1联合体类型的声明1.2联合体的特点1.3相同成员的结构体和联合体对比1.4联合体大小的计算1.5联合的⼀个练习2.枚举类型2.1枚举类型的声明2.2枚举类型的优点2.3枚举类型的使用1.联合体1.1联合体类型的声明像结构体⼀样,联合体也是由⼀个或......