1

是否可以将 spring cloud oauth 2 服务器与 kubernetes api 网关入口一起使用。

在拨打电话之前,我已将其与 zuul 一起使用来验证用户身份。我可以对入口做类似的事情吗?

编辑1:

为了更清楚地解释它,我想要实现的目标

我正在使用 spring cloud 提供的基于令牌的 oAuth2 实现。

  1. oauth 作为 zuul 背后的服务之一运行。
  2. zuul 为 oauth 服务器和资源服务器映射了路由
  3. 客户端通过zuul调用auth server并获取token。
  4. 客户端通过 zuul 调用资源服务器并传递令牌
  5. zuul 配置为在调用资源服务器之前验证令牌。

通过这种方式,我们可以阻止任何下游流量在没有有效令牌的情况下进行。

我们可以在集群中运行身份验证服务器的入口进行令牌验证吗?

4

2 回答 2

1

我没有使用 Spring Cloud OAuth 2,但由于 OAuth 是一个标准,我相信如果您使用 Nginx Ingress 作为入口控制器,您可以设置它,您可以指定外部 Oauth Provider(因为 OAuth 通常具有相同的流程)像这样在您的入口处:

...
metadata:
  name: application
  annotations:
    nginx.ingress.kubernetes.io/auth-url: "https://$host/oauth2/auth"
    nginx.ingress.kubernetes.io/auth-signin: "https://$host/oauth2/start?rd=$escaped_request_uri"
...

您可以在此处找到更多信息,其中包含使用 GitHub 作为 OAuth 提供者的示例

于 2019-09-20T08:04:43.180 回答
0

目前有三种不同的 nginx-ingress-controllers(见这里),它们的功能不同。我相信这些入口控制器本身都不能执行 oauth 令牌自省。但是,可以使用 auth_request 模块将请求路由到授权服务器的自省接口。

特别针对您的情况,您可以使用入口控制器中的 auth-url 注释(请参阅)将请求定向到 spring cloud oauth2 服务器的自省接口(请参阅)。当使用 @EnableAuthorizationServer 时,默认情况下,自省接口在 /oaut/check_token 下可用。如果自省接口返回 2XX,则 ingress 将转发请求。此功能基于 auth_request 模块,如果允许访问,则需要来自外部服务的 2xx 响应代码,如果拒绝,则需要 401 或 403。

如果您使用 JWT 并希望仅通过检查签名来验证请求,则在某些情况下,这实际上可以由入口本身完成。据我所知,只有 nginx 加入口控制器(付费)才能验证 JWT。但也有基于 nginx 的 kong-ingress 控制器,您可以为它配备 pulgins(参见此处)。例如,通过 oauth2 集成和 JWT 验证进行推广。

你发现的比我多吗?

于 2019-11-08T10:08:43.370 回答