Zuul代理oAuth2在Spring Boot中未经授权

时间:2016-06-25 15:54:46

标签: spring proxy spring-boot oauth-2.0 netflix-zuul

我有一个使用oAuth2保护的微服务,称为country-service。当我直接向此服务发送请求(包括我的JWT承载令牌)时,一切正常:

enter image description here

server:
  port: 8081

spring:
  database:
    driverClassName: org.postgresql.Driver
  datasource:
    url: jdbc:postgresql://localhost:5432/vue-boot-country
    username: postgres
    password: postgres
  jpa:
    hibernate:
      ddl-auto: validate
    database-platform: org.hibernate.dialect.PostgreSQLDialect

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

我也有一个api-gateway(Zuul代理):

@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class VueBootApiGatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(VueBootApiGatewayApplication.class, args);
    }
}

除了这两个文件之外没有其他文件

server:
  port: 8765

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

zuul:
  routes:
    vue-boot-country-service: /api/country/**
  add-proxy-headers: true

我无法向代理发送成功的请求,我一直收到#34;未经授权的"错误:

enter image description here

注意:当我从资源服务器中删除oAuth2安全性时,Zuul代理似乎可以正常工作。

有人知道我在这里做错了吗?

2 个答案:

答案 0 :(得分:4)

这与zuuls所谓的“敏感”标题有关,比如“授权”。对于传递给内部的所有请求,这些都被过滤了......

我不知道,如果只使用此配置设置标头:

zuul:
  ignoredHeaders:
    - authorization

如果没有,您可以定义一个Zuul过滤器bean来手动管理它:

@Component
public class RelayTokenFilter extends ZuulFilter{
    @Override
    public String filterType() {
        return "pre";
    }

    @Override
    public int filterOrder() {
        return 10000;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() {
        RequestContext context = RequestContext.getCurrentContext();

        @SuppressWarnings("unchecked") Set<String> ignoredHeaders = (Set<String>) context.get("ignoredHeaders");
        ignoredHeaders.remove("authorization");

        return null;
    }
}

答案 1 :(得分:1)

我有同样的问题。令牌不会通过Zuul传递给微服务。所以我加了

<?xml version="1.0" encoding="UTF-8"?> <ContentView xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="TcuClientStandard.Helpers.Views.View1"> <ContentView.Content> <ScrollView Orientation="Horizontal"> <StackLayout x:Name="stackLayout" Orientation="Horizontal"> </StackLayout> </ScrollView> </ContentView.Content> </ContentView>

希望它可能对某人有用