Netflix Zuul 2 API网关身份验证/请求验证方法(非春季)

时间:2019-07-07 17:45:29

标签: authentication authorization netflix-zuul api-gateway netflix

我想将Netflix Zuul 2(https://github.com/Netflix/zuul)放在我的服务前面,并对传入的请求进行一些身份验证/确认。 通过API网关的每个请求,例如/api/service1/value将具有auth令牌,我想先验证该令牌,然后再将请求路由到适当的后端服务。

我有几个问题,希望有人能指出我正确的方向。

入站筛选器似乎是放置该逻辑的正确位置。 目前,我的理解是可以这样做:

class RequestAuthenticationFilter extends HttpInboundSyncFilter {

    @Override
    HttpRequestMessage apply(HttpRequestMessage request) {
         // extract header with token and call auth service to validate it

         if (ifTokenNotValid) {
             // returns a 401
             request.getContext()
                 .setEndpoint(UnauthorizedRequestEndpoint.class.getCanonicalName())   
         }

         // continue filter chain
         return request
    }
}

我不确定如何对auth服务进行调用,并在入站过滤器中获取响应,以便可以检查响应并采取适当的措施-返回401或继续路由/api/service1/value向下游后端服务的请求。

  1. 是否存在用于从入站筛选器到服务的外部调用的标准方法?

  2. 我是否需要使用HttpClient等导入另一个库来实现此目的?

  3. 是否有其他/更好的方法来处理此流程?

我了解,对于从入站筛选器到端点的常规路由,可以使用ProxyEndpoint:

入站过滤器配置:

...
if (path in request matches) {
    context.setEndpoint(ZuulEndPointRunner.PROXY_ENDPOINT_FILTER_NAME)
    context.setRouteVIP("service1")
}

return request

任一Eureka配置:

service1.ribbon.NIWSServerListClassName=com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList
service1.ribbon.DeploymentContextBasedVipAddresses=authservice

或手动配置的服务器列表:

service1.ribbon.listOfServers=localhost:8080
service1.ribbon.client.NIWSServerListClassName=com.netflix.loadbalancer.ConfigurationBasedServerList
  1. 有没有一种方法可以配置auth服务并将其插入流中,即 请求>>验证身份验证令牌(身份验证服务请求,响应)>>继续原始请求?

0 个答案:

没有答案