我已经使用 WebSocket 协议设置了 API 网关。在“$connect”路由请求设置中,我选择“AWS_IAM”作为授权方法。用户通过 Cognito 登录后,Web 应用程序需要与此 WebSocket API 建立连接。然后,我如何授权来自 Web 应用程序上的 JavaScript 的 WebSocket API 请求?使用 HTTP API 网关,我可以根据访问密钥和会话令牌生成签名,并将其传递到请求标头。但我无法在 WebSocket 请求中传递标头。
amazon-web-services websocket amazon-iam aws-api-gateway api-gateway
我已经交付了 aws serverless(LAmbda、API GW 和 DynamoDB),但在开发人员测试期间,他们的“Postman”实用程序遇到了以下错误:
{
"message": "Authorization header requires 'Credential' parameter.
Authorization header requires 'Signature' parameter.
Authorization header requires 'SignedHeaders' parameter.
Authorization header requires existence of either a 'X-Amz-Date' or a 'Date'
header.
Authorization=xxxxxxxxxxxxxxxxxxxx"
}
Run Code Online (Sandbox Code Playgroud)
我已经检查了cloudwatch日志,但没有发现任何内容,我认为这意味着请求没有到达API端点,我不知道为什么。
实际上,我需要找出这个错误是否是由于 Postman 参数或 api 端点而发生的。
PS Lambda代码是使用Python开发的
请指教。
我的理解是API网关模式就像是所有微服务的代理.因此,客户端调用API网关来处理进一步的路由.BFF是API网关模式的一个特例,我们为每种类型的客户端都有一个路由机制.我对吗?
我们在微服务场景中使用 Zuul 作为 API 网关已经有一段时间了,最近我们决定迁移到 Kubernetes 并选择一种更加云原生的方式。
经过一番调查和阅读 Istio 文档,我们对 Kubernetes 中的 API 网关选择有一些疑问:
我有一个脚本想要获取 AWS API 网关 ID 和 API 密钥值。到目前为止,我已经能够使用 cli 获取 API 网关 ID:
aws apigateway get-api-keys --query 'items[?name==`my-api-key-name`].id' --output text --region us-east-1
Run Code Online (Sandbox Code Playgroud)
但我无法获取 API 密钥的值。我尝试过以下 cli,但没有成功:
aws apigateway get-api-keys --query 'items[?name==`my-api-key-name`].value' --output text --region us-east-1
Run Code Online (Sandbox Code Playgroud)
有人可以帮我吗?
我在 springboot 应用程序中有 application.yaml 如下
spring:
cloud:
gateway:
routes:
- id: pgService
uri: http://localhost:2005/
predicates:
- Path=/employee/**
- id: inMateService
uri: http://localhost:2006/
predicates:
- Path=/consumer/**
Run Code Online (Sandbox Code Playgroud)
上述声明的变量是针对Spring Cloud Gateway的
我想在 application.properties 文件中声明这些相同的变量。我不想使用 yaml 文件。请帮助我实现这个目标谢谢
java properties-file microservices api-gateway spring-cloud-gateway
我试图理解 API 网关和微服务聚合器模式之间的差异。
目前,根据我的理解,聚合器模式通过从各种微服务收集数据片段并返回聚合进行处理来发挥作用。
现在,API 网关是聚合对各个微服务的调用的单一入口点。虽然这听起来与聚合器模式非常相似,但有一些不同的特征。最重要的是,这项新服务不存储数据,而是负责 API 组合、请求路由和身份验证等新功能
我真的很想知道我的推理是否正确。
先感谢您!
我有一个自定义网关过滤器MYGatewayFilter.java文件现在我想使用这个网关过滤器与我在application.yml中编写的路由
spring:
cloud:
gateway:
routes:
- id: login2_route
uri: http://127.0.0.1:8083/login
predicates:
- Path: /login/
filters:
Run Code Online (Sandbox Code Playgroud)
如何为上述路线定义过滤器
自定义筛选MyGatewayFilter.java
public class MyGatewayFilter implements GatewayFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request;
if(request.getHeaders().get("x-mydata")!=null){
request= exchange.getRequest().mutate().header("my-new-header",request.getHeaders().get("x-mydata").get(0)).build();
}
return chain.filter(exchange.mutate().request(request).build());
}
}
Run Code Online (Sandbox Code Playgroud) 目前,我有一个带有 Java/Spring Boot 的单体应用程序,具有以下端点:
/login/logout/some-resource要访问some-resource,流程如下:
POST向/login端点发出请求。如果凭据正确,则在标头中返回 JWT 令牌,否则返回 401。/some-resource。如果令牌有效,则返回资源,否则返回 403。现在我想将单体拆分为 2 个服务:“AuthServer”和“SomeResourceServer”。顶部会有一个 API 网关。我正在考虑 2 种可能的方式来处理授权
/login端点发出请求。API 网关将其转发到“AuthServer”。如果凭据正确,则在标头中返回 JWT 令牌,否则返回 401。- 此步骤相同/some-resource。API 网关调用“AuthServer”来验证 JWT 令牌。如果令牌有效,API 网关调用“SomeResourceServer”并返回结果。否则 403。/login端点发出请求。API 网关将其转发到“AuthServer”。如果凭据正确,则在标头中返回 JWT 令牌,否则返回 401。- 此步骤相同/some-resource。API 网关只是将请求转发到“SomeResourceServer”。然后“SomeResourceServer”调用“AuthServer”来验证 JWT 令牌。如果令牌有效,则返回资源,否则返回 403。在选项 1 中,API 网关负责处理授权(与“AuthServer”通信),在选项 2 中,通信在服务器之间完成。那么哪个选项更正确呢?有什么好的/坏的做法吗?或者也许是另一种方式/选择?
architecture authentication authorization microservices api-gateway
到目前为止,我还没有找到有关将 Blazor Server(不是WebAssembly)与 API 网关和微服务结合使用的指南。讨论这些 Blazor 以及 API 网关和微服务的文章总是提到 Blazor WebAssembly (Wasm)。(是否假设 Blazor Server 应用程序不会使用微服务?此外,就其价值而言,选择 Blazor Server 而不是 Blazor WebAssembly 的原因是为了更好地保护知识产权。)
\n\n无论如何...我想知道 Blazor Server 应用程序是否应该位于网关前面,通过网关将其内部 API 调用发送到网关后面的微服务,例如 \xe2\x80\xa6
\n\n[浏览器] ----(SignalR)--- [Blazor 服务器应用程序] ----(https)---- [API 网关] ----(http)---- [微服务]
\n\n或者将应用程序放在网关后面,让 SignalR 连接隧道通过网关,这样更有意义吗\xe2\x80\xa6
\n\n[浏览器] ----(SignalR)---- [API 网关] ----(SignalR)---- [Blazor 服务器应用程序] ----(http)---- [微服务]
\n\n请记住在建立 SignalR 连接之前应用程序在浏览器中的初始加载。需要单独处理吗?它会影响上面给出的选项的选择吗?我缺少更好的解决方案吗?
\narchitecture microservices api-gateway blazor blazor-server-side
api-gateway ×10
architecture ×2
java ×2
netflix-zuul ×2
aggregate ×1
amazon-iam ×1
api-key ×1
aws-cli ×1
blazor ×1
istio ×1
kubernetes ×1
spring ×1
spring-boot ×1
websocket ×1