问题标签 [ocelot]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1854 浏览

.net-core - 具有多个配置文件和环境的 Ocelot

有没有办法将 Ocelot 与多个配置文件和环境一起使用ocelot.service1.Development.json

不幸的是,文档似乎已经过时,也没有处理我的具体要求。我看到它能够有多个文件将被合并文档

它有效,但不符合我的要求。

该文档还描述了以下设置文档

但是这个解决方案也不符合我的要求。

有什么办法可以将两种方式结合起来吗?

0 投票
1 回答
1335 浏览

.net-core - 在 Swagger 中为 Ocelot 请求 URL 错误,例如 http://http://

我在 .Net 微服务网关中使用 Swagger for Ocelot。我正在为 ocelot swagger 使用以下包:

安装包 MMLib.SwaggerForOcelot -版本 1.10.1

我收到以下问题。

在此处输入图像描述

正如我在图片中提到的,http 正在网关请求 URL 中复制

我的项目配置如下,

我的 Ocelot 配置如下,

我在启动文件中的招摇配置如下,

0 投票
1 回答
1560 浏览

c# - Ocelot - 在网关中更改上游请求正文不会导致下游请求发生变化

我正在设计微服务架构如下:

微服务架构

Gateway 使用 Ocelot 转发请求。我想更改从网关端的移动设备收到的请求中的正文,并在正文中添加新的 GUID。微服务使用 CQRS 模式,因此命令不应返回任何内容。我实现了自定义中间件来更改 DownstreamContext:

我在调用 await this.Next(context); 之前调试了这个和 DownstreamRequest 的内容 已更改,但传入微服务的请求未更改。有什么方法可以更改网关中的请求并以更改的形式将此请求转发给微服务?

0 投票
0 回答
524 浏览

c# - Ocelot .NET Core 平衡问题与已关闭的微服务

我有一个关于 NET Core 3.1 上使用 Ocelot 的 api gateway 的问题,并且我在两个不同的站点上发布了一个微服务,我希望您使用平衡器检查微服务是否已关闭,如果是,请转到第二个微服务。我试过这个:https ://ocelot.readthedocs.io/en/latest/features/loadbalancer.html#configuration它可以工作,但问题是它只分析请求的数量并在它到达时进行编排,但是如果服务中断并给出错误。ocelot 可以提高我的需求吗?我需要一些额外的 nuget 包吗?非常感谢您

0 投票
0 回答
784 浏览

docker - 将 Ocelot 与 docker-compose 和 asp.net 核心一起使用时出现 403(禁止)

我正在尝试使用 Ocelot 将使用 HttpClient 的 Web 应用程序的请求重定向到在 Docker 中运行的 Asp.Net Core WebAPI。Ocelot 也在容器中运行。两个容器(ProductManagementAPI 和 Ocelot)都是使用 docker-compose 创建的。

下面是我的 ocelot.json 文件:

当我直接浏览时运行“docker-compose up”命令后:http://localhost:8100/api/product/product,我得到了所需的响应。

但是,当我从本地运行的 Webapp 发出请求以通过 Ocelot Api 网关(也在容器中运行)从容器中运行的 API 获取响应时,出现以下错误:

ocelotapigateway_1 | requestId:0HLTAOJJEL03J:00000001,previousRequestId:没有以前的请求id,消息:403(禁止)状态码,请求uri:http://productmanagementapi:8100/api/product/product

即使我将 ocelot.json 文件中的下游主机替换为“localhost”,我也会收到错误消息。

我没有在上述任何应用程序中启用授权。

当我使用 WebApplication 中的 HttpClient 直接调用在 docker 中运行的 WebAPI 时,它可以工作。但是当在两者之间放置 Ocelot 网关时,它会停止工作。

0 投票
1 回答
1891 浏览

azure-active-directory - Ocelot 与 Azure Active Directory 身份验证 .Net Core 3.1 集成

背景:我的公司正在迁移到 API 网关来管理我们网络中的所有服务。每个服务当前都使用 azure AD 进行身份验证。一切都是单租户,只允许公司用户。 问:我理解正确吗? 问题:当我调用 http:localhost:5000/authResource/get 时,我收到了来自 Ocelot 的 401 响应。跟踪错误后,我看到当 Ocelot 身份验证中间件尝试使用 AzureADJwtBearer 方案进行身份验证时,我返回 null。

我遵循了与 Ocelot 和 azure ad 相关的问题的建议,但即使遵循这些建议,我也无法进行任何工作。(主要来自这个答案:How setup Ocelot Api Gateway with Azure Active Directory)我想我可能误解了身份验证应该如何工作。我目前的理解是,我告诉 Ocelot 使用 AzureADJwtBearer 方案对我的一个 API 进行身份验证。在我的配置中,我有该特定 api 设置的信息(ClientId、TenantId 等)。

一旦我调用了路由,我希望 Ocelot 会调用 Microsoft 以开始身份验证。在这一点上,我期望与 API 提供的流程相同,即我拨打电话并获取 Microsoft 登录页面,然后在我输入用户名和密码后将我重定向回应用程序。

在将我重定向回 Ocelot 后,我​​猜(这是我模糊的部分),我希望 ocelot 存储 Microsoft 为我刚刚请求的特定资源发回的访问令牌。然后我希望 ocelot 将令牌附加到 Auth 标头,然后发送对我最初要求的资源的请求。

为了澄清这一点,我将包含我的启动文件和我的 ocelot.json 文件的代码。来自 Startup.cs

同样来自 Startup.cs

我的已验证资源的 ocelot.json 文件如下(出于安全原因更改了名称):

为了巩固我对此的理解,我将通过一个示例,使用 ocelot 配置中显示的示例 api。

我希望访问资源http://localhost:5003/api/Controller/Get,这是一个受保护的 API,这意味着如果我在获取请求中提供授权标头,我只能从中获得响应。我通过我的 ocelot 网关向 url http://localhost:5000/authResource/get发出请求(我在 localhost:5000 上托管 Ocelot)。Ocelot 发现它需要进行身份验证才能访问此资源,因此它使用 AzureADJwtBearer 方案发出请求。我被重定向到微软登录。完成后,我会带着访问令牌返回到 Ocelot 应用程序。Ocelot 接受此操作,创建 Auth 标头,最后调用http://localhost:5003/api/Controller/Get并返回结果。

0 投票
0 回答
156 浏览

identityserver4 - 如何在 Ocelot 中支持子域通配符(例如 *.mydomain.com)

这是我的环境:

  1. 以子域(例如 t01.app.com)作为租户识别策略的多租户。
  2. 使用 IdentityServer4 发出令牌。每个租户都有自己的发行人。例如 t01.app.com 是 t01 的发行者。
  3. 使用 Ocelot 作为网关

我希望实现这样,Ocelot 能够使用子域作为通配符进行重定向

  • 浏览器 A 调用 t01.ocelot.com -> Ocelot 重定向到 t01.app.com
  • 浏览器 B 调用 t02.ocelot.com -> Ocelot 重定向到 t02.app.com

任何人都可以帮助我吗?或者建议一些其他可以支持这一点的网关。

0 投票
1 回答
1305 浏览

asp.net-core - 如何检查数组中的声明值或 Ocelot 网关中的任何值?

假设我有 2 个这样的端点

  1. 订单创建:需要使用数组["order_create", "order_edit"]中的值声明order_perm
  2. 订单搜索:只需要声明order_perm存在

在案例 1. 中,我将上面的数组传递给RouteClaimsRequirement,如下所示

但是当应用程序启动时它会崩溃,如果是 2。我这样设置

但用户声称“order_perm”:“create_order”授权失败。

RouteClaimsRequirement是否支持这些用例?如果是这样,我该怎么做?

0 投票
0 回答
1962 浏览

c# - Ocelot Asp.net Core PreAuthentication 中间件

我目前正在使用 Ocelot 作为微服务架构的 Api Gateway。我有一些经过身份验证的重新路由并且能够使用它,我声明了一个身份验证中间件,如下所示:

我想运行一些自定义验证来实现刷新令牌工作流,为此我实现了 preAuthentication 中间件来进行测试:

据我了解,当我进行 api 调用时,将调用 preAuthenticate 中间件,并使用 next.Invoke() 调用我的身份验证中间件。我的 PreAuthentication 中间件中新生成的令牌是有效的,但我的身份验证中间件会引发 expiredToken 异常,即使他不是。因此,当新的 JWT 尚未设置为授权标头时,我认为身份验证中间件是针对第一个 JWT 运行的。是参加的行为吗?或者我没有正确理解 Ocelot 中的中间件?

无论如何,一些帮助将不胜感激!

祝你有美好的一天,

0 投票
0 回答
1826 浏览

asp.net-core - Ocelot 网关:没有这样的主机是已知的

我使用 Ocelot 作为网关,使用 Consul 作为服务发现。在Ocelot.Errors.Middleware.ExceptionHandlerMiddleware[0]中的第一个 API 调用 Ocelot Gateway 后出现错误

我的输出日志在这里:

豹猫配置是:

在第一次通话中,一切都是正确的,但在那之后我突然面临错误。

我的问题在哪里?