我有一个auth service
,它检查req.headers.Authorization
中jwt令牌的有效性,我有另一个API服务来为customer
实体执行CRUD操作,这将需要对所述API服务的每个请求都使用有效的jwt。所有这些都被包裹在kubernetes cluster + istio
中。我目前正在做的是像这个
- 客户端正在请求
POST /customer
,JWT为headers.Authorization
- 后端的
POST /customer
API服务将通过传递JWT来检查其有效性,从而与auth service
进行通信 - 如果无效,则返回一些令牌错误响应
- 如果有效,则执行创建客户操作,并将数据保存到数据库中
虽然这很好,但我发现我在每个端点上都重复这个auth checks
,当然我可以在同一服务上设置一个中间件,通过在传入请求到达controller
之前拦截该请求来进行检查。
我想知道是否有可能在istio
中实现这种middleware
方法,而不是将其写在服务本身上。
我想实现
- 客户端正在请求
POST /customer
,JWT为headers.Authorization
-
istio sidecar(?)/ingress gateway
将捕获此请求,并将其发送(重定向(到身份验证服务以首先进行检查,然后再将其传递到目标 - 如果无效,则返回一些令牌错误响应
- 如果它有效,则将其传递到原始目的地
istio能做到这一点吗?我已经阅读了关于授权的istio文档,但我不认为它解释了我想在这里实现的事情
在Istio中,使用JWT的最终用户身份验证是绝对可能的。您可能正在寻找这篇文章,它解释了使用Istio进行JWT身份验证和授权。
请参阅https://istio.io/latest/docs/tasks/security/authorization/authz-jwt/
我相信,通过请求路由,您试图实现的目标是可能的。基本上,基于标头聊天请求,并将其路由到服务。