【发布时间】:2021-05-17 21:59:57
【问题描述】:
我有一个 auth service 来检查 req.headers.Authorization 中 jwt 令牌的有效性,并且我有另一个 API 服务来为 customer 实体执行 CRUD 操作,这将需要对每个请求都使用有效的 JWT 来表示API 服务。所有这些都包含在kubernetes cluster + istio 中。我现在做的是这样的
- 客户端请求
POST /customer,JWT 为headers.Authorization - 后端的
POST /customerAPI 服务随后将通过传递 JWT 以检查其有效性与auth service通信 - 如果无效,则返回一些令牌错误响应
- 如果有效,则进行创建客户操作,并将数据保存到数据库中
虽然这工作正常,但我发现我在每个端点上重复这个auth checks,我当然可以在同一个服务上设置一个中间件,通过在传入请求到达@之前拦截传入的请求来进行检查987654333@.
我想知道是否可以在istio 中实现这种middleware 方法,而不是将其写在服务本身上。
我想要达到的目标
- 客户端请求
POST /customer,JWT 为headers.Authorization istio sidecar(?)/ingress gateway将捕获此请求,并将其发送(重定向)到身份验证服务进行检查,然后再将其传递到目的地- 如果无效,则返回一些令牌错误响应
- 如果有效,则将其传递到其原始目的地
istio 能做到这一点吗?我已经阅读了Authorization 上的 istio 文档,但我认为它并不能解释我想要在这里实现的目标
【问题讨论】:
-
假设您有自己的身份验证服务,您可以使用 webassembly 来激活它。示例:github.com/solo-io/proxy-runtime/tree/master/examples/auth、github.com/proxy-wasm/proxy-wasm-rust-sdk
标签: authorization istio istio-gateway