骆驼路线动态授权问题

时间:2019-09-14 06:09:23

标签: java spring spring-boot apache-camel spring-camel

我正在实现一个小型的spring boot camel网关,可以动态管理路由。 路由也可以是安全的或不安全的,如果安全,负责的处理器可以选择如何授权来电。我们希望支持CAS,OIDC和OAUTH2,并且暂时不使用Spring Security或Shiro。

动态添加路由的示例:

if(api.isSecured()) {
   from("direct:" + api.getContext() + path.getPath() + "-" + path.getVerb())
      .streamCaching()
      .process(authProcessor)
      .choice()
         .when(simple("${in.headers.VALID} == true"))
            .toF(Constants.REST_ENDPOINT_OBJECT, (api.getEndpoint() + path.getPath()))
            .convertBodyTo(String.class)

         .otherwise()
            .toF(Constants.FAIL_REST_ENDPOINT_OBJECT, apiGatewayErrorEndpoint)
            .convertBodyTo(String.class)

       .end()

} else {
   from("direct:" + api.getContext() + path.getPath() + "-" + path.getVerb())
      .streamCaching()
      .toF(Constants.REST_ENDPOINT_OBJECT, (api.getEndpoint() + path.getPath()))
      .convertBodyTo(String.class)
      .end()

}

如果API是安全的,我会致电处理器,以检查可用的授权。

@Autowired
AuthProvider authProvider;

public void process(Exchange exchange) throws Exception {

   exchange.getIn().setHeader("VALID", false);

   if(exchange.getIn().getHeader("Authorization") != null) {
      String token = exchange.getIn().getHeader("Authorization").toString();
      try {
         authProvider.validate(token);
         exchange.getIn().setHeader("VALID", true);
      } catch(Exception e) {
           log.info("Unable to decode the token");
      }
   }

}

由于,如上所述,我们需要支持多个授权提供者,因此在此处理器中,将使用正确的注入的auth提供者来验证令牌,如果令牌(jwt或opaque)无效,则返回异常。 / p>

在Camel中是否有支持多个授权提供者的标准方法?

0 个答案:

没有答案