问题标签 [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 投票
3 回答
10034 浏览

asp.net-core - Asp.Net Core 中的多个 JWT 授权机构/发行人

我正在尝试使用 Ocelot 在 ASP.Net API 网关中获得 JWT 不记名身份验证,以与多个授权机构/颁发者合作。一个发行者是Auth0,另一个是基于IdentityServer4的内部认证服务器;我们正在尝试从 Auth0 迁移,但仍有外部客户端依赖它,因此我们希望同时支持这两种客户端,直到一切都经过全面测试以供切换。

根据this MSDN blog post,应该可以通过设置TokenValidationParameters.ValidIssuers而不是使用多个权限JwtBearerOptions.Authority。但是,我已经在使用和不使用 Ocelot 的情况下对此进行了测试,如果没有将授权设置为颁发令牌的授权,则不会发生身份验证,无论TokenValidationParameters.ValidIssuers.

有谁知道如何让这个工作?这就是我设置身份验证的方式。它仅在注释行未注释时才有效(并且仅适用于由该单一机构颁发的令牌)。我期待 Ocelot 或 ASP.Net Core 从发布服务器获取密钥;两者都通过 .well-known/openid-configuration 提供 JWK,它与 ASP.Net Core 中间件一起使用。

当有错误发行者的客户端(或当我们使用TokenValidationParameters.ValidIssuer/时ValidIssuers)连接时,Ocelot 的输出是:

这是一个 client_credentials 身份验证,因此在“by”之后缺少用户名。正如您所看到的,Ocelot 并没有说明确切的问题是什么。ASP.Net Core JWT 承载中间件(没有 Ocelot)只是说签名无效。我怀疑它要么没有看TokenValidationParameters,要么我误解了它们的目的。

0 投票
1 回答
416 浏览

c# - 如何使用 Ocelot API 网关重新路由来支持 Kubernetes 就绪/活跃度探测?

我正在尝试使用 Ocelot 作为 K8S 集群的网关,理想情况下希望使用就绪/活跃度探测器。但是我试图让 Ocelot 处理探针端点的每一种方式都会导致问题:

  1. 如果我不为其创建重新路由,Ocelot 将返回 404
  2. 如果我将端点重新路由回自身,Ocelot 就会陷入无限循环
  3. 如果我将端点重新路由到本身未重新路由的现有位置,Ocelot 将返回 404

有没有办法让 Ocelot 允许访问驻留在同一服务中的端点?

0 投票
1 回答
3221 浏览

docker - 如何定义 Ocelot API 网关的 URL

我有三个 ASP.NET Core WebAPI 服务 Customer、Subscribe、Unscubscribe 和 swashbuckle 和 docker compose 项目一切运行良好我添加了安装了 Ocelot 的 Ocelot API Gateway(ASP.NET 核心项目)。

通过自己的地址https:///api/Customer访问客户服务效果很好。但是从网关我不知道我应该使用哪个网址,例如这个客户服务我尝试了很多变体,比如:

  • http:///api/
  • http:///api/a/customer
  • http:///a/api/customer

但他们都返回404。 网关可能是http而不是https的问题?

程序.cs

启动.cs

配置:

配置.json:

码头工人-compose.yml:

0 投票
2 回答
11772 浏览

c# - ASP.NET Core Api-Gateway 中间件

我是 API 网关的新手,有一个理解问题。我也尝试在端点后面放置一系列(微)服务。

为此,我设置了一个 ASP.NET Core 应用程序并添加了ThreeMammals Ocelot包。在文档的帮助下,我配置了上游和下游。到现在为止还挺好。

草图

客户端向http://mygateway:4242/s1/ {api} 发出请求,例如,按预期从 Service1 获取 JSON 或 XML 响应。

http://mygateway:4242/s2/ {api} 的行为与预期结果相同!

我的理解问题在于Service3。当我向http://mygateway/s3/发送请求时,我得到 index.html 作为响应。

index.html 本身需要通过链接标签的 CSS 文件“xyz.css”并强制客户端加载文件。

在这种情况下,客户端发送到“mygateway”的请求 URL 是http://mygateway:4242/xyz.css而不是 http://mygateway:4242/ s3 /xyz.css 所以响应是 404 not found,因为“mygateway”对“xyz.css”一无所知

如何解决此路由(?)问题?

ocelot中间件是否可以解决这个问题?或者我是否需要 SinglePageApplication (SPA) 的服务 (Service3) 的其他内容?

也许将 SPA 放在网关后面是不可能或错误的?我希望你能给我一些技巧来访问网关后面的 SPA 或 MVC 网站。

感谢 iBot


UPATE:附上 index.html的代码。我认为这是直截了当的。

0 投票
1 回答
615 浏览

docker - 将 IdentityServer4 隐藏在 Ocelot 网关后面

我试图通过将其拆分为更小的部分来解决更大的问题。第一个问题是我不知道如何正确隐藏。出于这篇文章的目的,我创建了一个简单的演示应用程序,它可以部署到 docker(在github上可用)。它内部有两个微服务:部署到 localhost:7060 的 OcelotGateway(OcelotIdentity 项目)和可部署到 localhost:7050 的 IdentityServer 微服务(Identity 项目)。这是我的豹猫配置文件:

所以我希望在 localhost:7060/identity 看到 IdentityServer 的快速入门页面,但我得到的是 404。当我直接通过身份服务器的 url (localhost:7050) 访问该页面时,该页面运行良好。

0 投票
0 回答
519 浏览

c# - 如何在 Ocelot API-Gateway 之后在 ASP.NET Core 2.1 API 中从 Azure AD B2C 验证 JWT

我使用 Ocelot 作为我们使用 ASP.NET Core 2.1 构建的微服务的 API 网关。

Ocelot 正在验证来自 AD B2C 的承载令牌并调用我的 Web API。

我使用标准 Azure AD B2Z 身份验证代码配置了我的 Web 服务:

API 始终返回 401(“发行者无效”)。错误可能来自 Ocelot 位于中间的事实。

我认为我不需要完整的身份验证,而是需要 JWT 令牌验证。但是,我找不到任何适用于 JWT 和 ASP.NET core 2.1 的示例代码,尤其是使用 Ocelot 作为中间人。我可能不得不跳过颁发者验证,但我不知道如何将 TokenValidationParameters 对象添加到配置中。

有人建过这样的系统吗?您如何处理/验证来自网关的令牌?

0 投票
1 回答
445 浏览

consul - 带有 ocelot 和 consul 的动态服务名称

我正在使用带有 Consul 和服务发现的 Ocelot 和 API 网关。我正在使用动态名称在 Consul 中注册服务,例如:service.name.1234 和 service.name.5678

此服务是静态的,根本不打算扩展

由于我正在使用 Ocelot,我希望能够将请求路由到所需的服务,但由于名称是动态的,我需要使用查询字符串参数作为服务名称

示例:http ://myapp.com/service/1234 应该重定向到名为 service.name.1234 的容器

有什么方法可以同时使用这两种产品吗?或者其他产品?

谢谢

0 投票
1 回答
2861 浏览

c# - Identityserver 4 和 Ocelot

我正在尝试按照 https://ocelot.readthedocs.io/en/latest/features/authentication.html将 Ocelot 与 IS4 一起使用

使用时

并在 ocelot.json 中使用“TestKey”,启动应用程序时会抛出错误

无法启动 Ocelot,错误为:TestKey,AllowedScopes:[] is unsupported authentication provider

知道有什么问题吗?我是否需要在我的 IdentityServer 应用程序中特别设置一些东西?

0 投票
2 回答
1200 浏览

authentication - 在 Ocelot 中注入 AuthenticationMiddleware - 如何返回 401

我认为这个问题有点微不足道,但我找不到答案:

我使用 Ocelot 作为 API 网关并使用我自己的身份验证中间件,因为我需要针对我们自己的数据库对用户进行身份验证。快乐的道路工作得很好。但是,如果用户无法进行身份验证,我只能返回 500 内部服务器错误,但我不知道如何让 ocelot 返回 401。

谁能帮我?这将是我的意思的基本意思:

0 投票
0 回答
197 浏览

microservices - API网关生产

我有一些 api,它们前面有一个 api 网关。它恰好是 Ocelot,这是我在本地环境中的配置:

该 api 作为 Kestrel 运行。没有码头工人。但是在生产系统上,它应该安装在 IIS 中

问题是这样的:在我的 locan 环境中,所有 apis,在 localhost 上运行的 api 网关,nad 都有一个端口。但是在服务器上,它们被安装为网站,以及网站内的应用程序。所以如果网站的地址是xyz.com,那么api1的地址就是xyz.com/api1。它是可用的。我不希望它可用,只能通过 api 网关。第一个问题是,如何仅通过 api 网关访问。

第二个问题是,它不起作用。这是我在服务器上的配置:

如果我去 xyz.com/Api1Api 它正在工作,但我不希望它工作,但如果我去 xyz.com/ApiGateway/Api1,它不工作,但我希望它从那里工作