Zuul -> Eureka Server, Basic Authentication issue

谁都会走 提交于 2019-12-22 05:34:29

问题


I am able to hit the service, if the flow doesn't contain Basic Authorization.

If i use Basic Authorization, it throws "message": "Full authentication is required to access this resource"

Below are my observations:

In ZuulFilter, run() method, i get value for request.getHeader("Authorization") --> Basic c29tOnNvbzz==

but once it reaches the Micro Service, i am getting value as 'null', request.getHeader("Authorization") --> null

Using Spring Boot version : 1.4.0.RELEASE

This is my flow:
------------------

Zuul -> Service Discovery (Eureka Server) -> Service

Kindly help, not sure where the Authorization header is vanishing.

Eureka Server yml file:
-------------------------
server.port:4001
eureka.instance.hostname=localhost
eureka.client.fetch-registry:false
eureka.client.register-with-eureka:false
eureka.client.serviceUrl.defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
eureka.client.healthcheck.enabled=true

Zuul yml file:
-----------------
server:
  port: 8765
info:
  component: Edge Server
eureka:
  instance:
    leaseRenewalIntervalInSeconds: 3
    metadataMap:
      instanceId: ${spring.application.name}:${random.value}
  client:
    # Default values comes from org.springframework.cloud.netflix.eurek.EurekaClientConfigBean
    registryFetchIntervalSeconds: 5
    instanceInfoReplicationIntervalSeconds: 5
    initialInstanceInfoReplicationIntervalSeconds: 5

endpoints:
  restart:
    enabled: true
  shutdown:
    enabled: true
  health:
    sensitive: false

zuul.sensitive-headers: Cookie,Set-Cookie,Authorization

logging:
  level:
    ROOT: WARN
    se.callista: INFO

    # Get info regarding connection to the cofig server and retries if required
    org.springframework.cloud.config.client.ConfigServicePropertySourceLocator: INFO
    org.springframework.retry.support.RetryTemplate: DEBUG

    # Set INFO to see the allocated port
    org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer: INFO
---
eureka:
  instance:
    preferIpAddress: true
  client:
    serviceUrl:
      defaultZone: http://localhost:4001/eureka,http://localhost:4002/eureka

回答1:


Authorization is by default a sensitive header, this means Zuul will not forward them. If you leave it out of the sensitive headers, Zuul will forward the header.

zuul.sensitiveHeaders: Cookie,Set-Cookie

It should also be camelCase instead of hyphenated.

Extra info: https://github.com/spring-cloud/spring-cloud-netflix/blob/master/docs/src/main/asciidoc/spring-cloud-netflix.adoc#cookies-and-sensitive-headers




回答2:


This solved my problem, but is this the only solution we have ?

ctx.addZuulRequestHeader("Authorization",request.getHeader("‌​Authorization"))




回答3:


Your property for zuul.sensitiveHeaders is wrong. It is camel case not hyphenated.

https://github.com/spring-cloud/spring-cloud-netflix/blob/master/docs/src/main/asciidoc/spring-cloud-netflix.adoc#cookies-and-sensitive-headers



来源:https://stackoverflow.com/questions/39102980/zuul-eureka-server-basic-authentication-issue

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!