【问题标题】:Handling user authorization in istio在 istio 中处理用户授权
【发布时间】:2021-05-17 21:59:57
【问题描述】:

我有一个 auth service 来检查 req.headers.Authorization 中 jwt 令牌的有效性,并且我有另一个 API 服务来为 customer 实体执行 CRUD 操作,这将需要对每个请求都使用有效的 JWT 来表示API 服务。所有这些都包含在kubernetes cluster + istio 中。我现在做的是这样的

  1. 客户端请求POST /customer,JWT 为headers.Authorization
  2. 后端的POST /customer API 服务随后将通过传递 JWT 以检查其有效性与 auth service 通信
  3. 如果无效,则返回一些令牌错误响应
  4. 如果有效,则进行创建客户操作,并将数据保存到数据库中

虽然这工作正常,但我发现我在每个端点上重复这个auth checks,我当然可以在同一个服务上设置一个中间件,通过在传入请求到达@之前拦截传入的请求来进行检查987654333@.

我想知道是否可以在istio 中实现这种middleware 方法,而不是将其写在服务本身上。

我想要达到的目标

  1. 客户端请求POST /customer,JWT 为headers.Authorization
  2. istio sidecar(?)/ingress gateway 将捕获此请求,并将其发送(重定向)到身份验证服务进行检查,然后再将其传递到目的地
  3. 如果无效,则返回一些令牌错误响应
  4. 如果有效,则将其传递到其原始目的地

istio 能做到这一点吗?我已经阅读了Authorization 上的 istio 文档,但我认为它并不能解释我想要在这里实现的目标

【问题讨论】:

标签: authorization istio istio-gateway


【解决方案1】:

在 Istio 中绝对可以使用 JWT 进行最终用户身份验证。 您可能正在寻找这篇介绍 Istio 的 JWT 身份验证和授权的文章。

https://istio.io/latest/docs/tasks/security/authorization/authz-jwt/

【讨论】:

  • 正如我所提到的,我也读过,但整个文档似乎没有为我的场景提供任何示例,您指出的那个是使用jwks.json,我认为是不同的场景/方法
  • 好吧,“通常”身份提供者支持 jwks 方法。如果只是关于验证 JWT 令牌,这意味着设置不那么复杂,无需显式重定向到身份验证服务。如果可能的话,这不是一个非标准的方法......
  • 我明白了,嗯,cmiiw,你想说的是我应该在我的 auth api 服务中提供 jkws 方法,然后在 istio 中使用从它生成的 jwks.json 文件设置?
  • 不,我的意思是如果您使用可以提供 jwks 选项的身份验证提供程序(例如 Auth0),您甚至不需要单独的身份验证服务。只有当这不可能时,Auth 服务才可能提供 jkws 供 Istio 使用。还是您的“身份验证服务”是身份验证提供者自己的实现?
  • 我的身份验证服务,是一个自己的实现,不,我不使用身份验证提供程序,例如 Auth0
【解决方案2】:

我相信,request routing 可以实现您想要实现的目标。基本上,根据标头聊天请求,并将其路由到服务。

【讨论】:

  • 我认为这只会重定向请求,而不会在成功时将请求传递给原始请求。根据我的问题,这只会满足#1和#2,因为我认为它永远不会达到#3和或#4
猜你喜欢
  • 1970-01-01
  • 2019-09-29
  • 1970-01-01
  • 2021-09-30
  • 2018-10-02
  • 2020-05-10
  • 2019-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多