.NET Core API网关Ocelot(十四)【转换Claims,日志,跟踪】
Ocelot允许用户访问claims
并把它们转换到头部,请求字符串参数和其他claims
中.这仅在用户通过身份验证后才可用。
用户通过身份验证之后,我们运行claims
转换中间件.这个中间件允许在授权中间件调用之前转换claims
.当用户身份验证之后,首先会调用claims
转换到头的中间件,然后调用claims
转换到查询字符串的中间件,最后调用claims
转换到downstream
路径中间件.
执行转换的语法对于每个处理都是相同的。在Route
配置中,使用特定名称AddClaimsToRequest
,AddHeadersToRequest
,AddQueriesToRequest
添加一个json字典。
注意,我不是一个编程专家,所以不知道这个语法是否好…
在词典中,这些条目指定了Ocelot应该如何转换! 字典的键将成为claim
,header
,query parameter
的键。对于ChangeDownstreamPathTemplate
,还必须在DownstreamPathTemplate
中指定key
,以便进行转换。
条目的值将被解析成转换的逻辑.首先指定了一个字典访问器,例如Claims[CustomerId]
.意思是我们想访问claims
并获取键为CustomerId
的claim
类型.然后一个大于号(>
)用于分隔.下一个条目是值或带索引器的值.如果指定了单个值,Ocelot将取该值并将其添加到变换中。如果该值有一个索引器,Ocelot将查找在另一个大于符号后面提供的分隔符。 然后,Ocelot会使用分隔符将值分开,并将所需的索引添加到转换中。
Claims
到 Claims
转换
下面是一个Claims到Claims转换的例子
"AddClaimsToRequest": {"UserType": "Claims[sub] > value[0] > |","UserId": "Claims[sub] > value[1] > |"
}
这显示了Ocelot查看用户的sub
声明并将其转换为UserType
和UserId
声明的转换。 假设sub
声明看起来像这样“usertypevalue | useridvalue
”。
Claims到header
的转换
下面是一个Claims
到头转换的例子
"AddHeadersToRequest": {"CustomerId": "Claims[sub] > value[1] > |"
}
这显示了Ocelot查看用户的sub
声明并将其转换为CustomerId
头的转换。 假设sub
声明看起来像这样“usertypevalue | useridvalue
”。
Claims 到查询字符串参数的转换
下面是一个Claims到查询字符串参数转换的例子
"AddQueriesToRequest": {"LocationId": "Claims[LocationId] > value",
}
这显示了Ocelot查看用户的LocationId
声明并将其作为发往下游服务的查询字符串参数LocationId
的转换。
Claims 到Downstream
路径转换
以下是将claims
转换为下游路径自定义占位符的示例配置
"UpstreamPathTemplate": "/api/users/me/{everything}",
"DownstreamPathTemplate": "/api/users/{userId}/{everything}",
"ChangeDownstreamPathTemplate": {"userId": "Claims[sub] > value[1] > |",
}
这显示了一个转换,其中Ocelot
着眼于用户userId
声明,并将该值替换为DownstreamPathTemplate
中指定的“ {userId}
”占位符。 考虑到ChangeDownstreamPathTemplate
中指定的密钥必须与DownstreamPathTemplate
中指定的占位符相同。
注意:如果ChangeDownstreamPathTemplate
中指定的键在DownstreamPathTemplate
中不作为占位符存在,则它将在运行时失败,并在响应中返回错误。
日志
目前,Ocelot使用标准的日志记录接口ILoggerFactory / ILogger<T>
。 在IOcelotLogger / IOcelotLoggerFactory
中提供了标准的asp.net core日志记录的一个实现。 因为Ocelot在日志中添加了一些额外的信息,如请求ID(如果已配置的话)。
这有个全局的错误处理程序,可以捕获所有异常并作为错误记录他们。
最后,如果日志记录设置为跟踪级别,Ocelot将记录开始,结束和任何抛出异常的中间件,这些异常可能非常有用。
不是使用标准框架的日志记录的原因是,我无法覆盖将IncludeScopes
设置为true
时记录的请求标识。
警告
如果您记录日志到控制台,您将获得糟糕的性能。 我遇到过很多关于Ocelot性能的问题,它始终记录调试级别的日志,并记录到控制台
.NET Core API网关Ocelot(十四)【转换Claims,日志,跟踪】相关推荐
- ASP.NET Core Api网关Ocelot的中文文档
架构图 入门 不支持 配置 路由 请求聚合 GraphQL 服务发现 微服务ServiceFabric 认证 授权 Websockets 管理 流量控制 缓存 QoS服务质量 转换Headers 转换 ...
- [Hei-Ocelot-Gateway ].Net Core Api网关Ocelot的开箱即用版本
写在前面 很多neter都有在用Ocelot做Api网关,但是Ocelot又不像kong或者其他网关一样,开箱即用.它需要你单独开一个web项目来部署,这样很多同学都在做重复的事了. 这里[Hei ...
- 一日一技:ASP.NET Core Api网关Ocelot初探
概述 Ocelot面向使用.NET运行微型服务/面向服务的体系结构的人员,这些体系结构需要在系统中具有统一的入口点.特别是我想与IdentityServer参考和承载令牌轻松集成.Ocelot是按特定 ...
- .NET Core开源API网关 – Ocelot中文文档
Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请求聚合.服务发现.认证.鉴权.限流熔断.并内置了负载均衡器与Service Fabric.Butterfly ...
- API网关—Ocelot之负载均衡
API网关-Ocelot之负载均衡 负载均衡 请求缓存 负载均衡 分布式架构中,当后端同一个应用的实例较多,负载均衡是非常必要的,否则前端对后端API的请求,可能只命中其中的几个应用实例,这几个实例压 ...
- API网关—Ocelot
API网关-Ocelot API网关 Ocelot Ocelot的基本使用 API网关 我们知道在微服务架构中,后端会有许许多多的服务实例,但是在UI上进行展示的时候,我们通常需要在一个界面上展示很多 ...
- API网关—Ocelot之服务发现
API网关-Ocelot之服务发现 集成Consul 集成nacos 动态路由 扩展Ocelot对注册中心的适配 通过配置文件,我们可以设定路由规则模板,Ocelot网关会将接收到的符合规则的请求转发 ...
- 『Ocelot』.NET开源API网关 – Ocelot详细使用及其说明(可当文档收藏使用)
Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请求聚合.服务发现.认证.鉴权.限流熔断.并内置了负载均衡器与Service Fabric.Butterfly ...
- API网关Ocelot 使用Polly 处理部分失败问题
在实现API Gateway过程中,另外一个需要考虑的问题就是部分失败.这个问题发生在分布式系统中当一个服务调用另外一个服务超时或者不可用的情况.API Gateway不应该被阻断并处于无限期等待下游 ...
最新文章
- hyperledge工具-cryptogen
- Python日志详解【两篇就够了系列】--第二篇loguru
- java服务熔断_springcloud-Hystrix-服务降级、服务熔断、服务限流
- 生成两个表的笛卡尔积
- Linux 下shell中exec解析
- CDialog中使用工具栏和状态栏
- spring ioc原理_干了5年的Java面试官,把他喜欢问的几十个Spring面试题告诉我了
- bzoj 1654: [Usaco2006 Jan]The Cow Prom 奶牛舞会(Trajan)
- 45. 将脚本放在底部(6)
- 如何在excel中创建二级菜单,即选择一个类型后,下一单元格可以选择其子类型
- 串口通信实验(通过串口控制LED、蜂鸣器)
- make settings时编译报错:dalvik/dx/bin/Android.bp:24:1: module “dx-doc-stubs“ already defined
- 阿里云服务平台,分布式架构云平台解决方案
- 5-lighttpd安装
- 【数据结构与算法】| Map和Set
- 阿基米德螺旋线lisp_CAD画阿基米德螺旋线程序
- 图文讲解 WiFi 驱动移植过程,很肝~
- 水准测量的各种数字考点
- (数据库系统)(十二)故障恢复
- 【fread/fwrite】C语言API之fread/fwrite函数详解