- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 zuul 代理( http://localhost:8765 )服务于一个有角度的网络应用程序( http://localhost:8080/app )。在 zuul 代理后面还有一个 oauth2 服务器( http://localhost:8899 )。
Web 资源在 http://localhost:8765/web 下代理并且资源在 http://localhost:8765/api 下代理.
Zuul 代理无需身份验证即可提供静态 Web 资源。因此,第一次身份验证是通过 JSON 调用 (GET/api/user) 完成的,这当然会以 401 失败。
现在我将页面转发到“http://localhost:8899/uaa/oauth/authorize?response_type=token&client_id=web&redirect_uri=http://localhost:8765/web/index.html ”以进行隐式授权 oauth 2 流程。我现在可以授权 Web 应用程序并转发回我的 Web 应用程序。 token 是 url 的一部分,我可以解析它。
恕我直言,我现在唯一要做的就是将此 token 添加为 Authorization header (例如 Authorization:Bearer 2829d5e2-4fbe-4f91-b74d-c99b2fe894a7)。但是 zuul 代理不会按照授权接受这个请求。
我正在使用 spring boot 1.3.2 和 spring cloud Brixton.M4。
Zuul 服务器应用程序可以在 here 中找到和安全配置 here .
这是我的请求 header :
Accept:application/json
Accept-Encoding:gzip, deflate, sdch
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
Authorization:Bearer 2829d5e2-4fbe-4f91-b74d-c99b2fe894a7
Connection:keep-alive
Cookie:XSRF-TOKEN=a6ddea36-e3b7-4f22-b80c-b4c8b6fd7760; JSESSIONID=DAE4649D11386D586A0CF739148E505A; XSRF-TOKEN=3a7a57ad-68f6-4cc6-923b-4e8fe340fe1e
Host:localhost:8765
Referer:http://localhost:8765/web/index.html
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/48.0.2564.82 Chrome/48.0.2564.82 Safari/537.36
X-Auth-Token:2829d5e2-4fbe-4f91-b74d-c99b2fe894a7
X-Requested-With:XMLHttpRequest
X-XSRF-TOKEN:a6ddea36-e3b7-4f22-b80c-b4c8b6fd7760
server:
context-path: /
security:
user:
password: none
oauth2:
sso:
loginPath: /login
client:
accessTokenUri: ${authserver.protocol}://${authserver.hostname}:${authserver.port}/${authserver.contextPath}/oauth/token
userAuthorizationUri: ${authserver.protocol}://${authserver.hostname}:${authserver.port}/${authserver.contextPath}/oauth/authorize
clientId: web
resource:
userInfoUri: ${authserver.protocol}://${authserver.hostname}:${authserver.port}/${authserver.contextPath}/user
preferTokenInfo: false
zuul:
routes:
web-portal:
path: /web/**
url: http://localhost:8080/app
user:
path: /api/user/**
url: ${authserver.protocol}://${authserver.hostname}:${authserver.port}/${authserver.contextPath}/user
authentication-service:
path: /uaa/**
stripPrefix: false
---
spring:
profiles: local
logging:
level:
org:
springframework:
security: DEBUG
authserver:
protocol: http
hostname: localhost
port: 8899
contextPath: uaa
2016-02-11 17:11:02.958 DEBUG 3242 --- [nio-8765-exec-4] o.s.s.w.u.matcher.AntPathRequestMatcher : Request '/api/user' matched by universal pattern '/**'
2016-02-11 17:11:02.958 DEBUG 3242 --- [nio-8765-exec-4] o.s.security.web.FilterChainProxy : /api/user at position 1 of 13 in additional filter chain; firing Filter: 'WebAsyncManagerIntegrationFilter'
2016-02-11 17:11:02.958 DEBUG 3242 --- [nio-8765-exec-4] o.s.security.web.FilterChainProxy : /api/user at position 2 of 13 in additional filter chain; firing Filter: 'SecurityContextPersistenceFilter'
2016-02-11 17:11:02.958 DEBUG 3242 --- [nio-8765-exec-4] w.c.HttpSessionSecurityContextRepository : HttpSession returned null object for SPRING_SECURITY_CONTEXT
2016-02-11 17:11:02.958 DEBUG 3242 --- [nio-8765-exec-4] w.c.HttpSessionSecurityContextRepository : No SecurityContext was available from the HttpSession: org.apache.catalina.session.StandardSessionFacade@5571734d. A new one will be created.
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.security.web.FilterChainProxy : /api/user at position 3 of 13 in additional filter chain; firing Filter: 'HeaderWriterFilter'
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.s.w.header.writers.HstsHeaderWriter : Not injecting HSTS header since it did not match the requestMatcher org.springframework.security.web.header.writers.HstsHeaderWriter$SecureRequestMatcher@42c144ce
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.security.web.FilterChainProxy : /api/user at position 4 of 13 in additional filter chain; firing Filter: 'CsrfFilter'
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.s.w.util.matcher.AndRequestMatcher : Trying to match using org.springframework.security.web.csrf.CsrfFilter$DefaultRequiresCsrfMatcher@4ad95822
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.s.w.util.matcher.AndRequestMatcher : Did not match
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.security.web.FilterChainProxy : /api/user at position 5 of 13 in additional filter chain; firing Filter: ''
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.security.web.FilterChainProxy : /api/user at position 6 of 13 in additional filter chain; firing Filter: 'LogoutFilter'
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.s.w.u.matcher.AntPathRequestMatcher : Request 'GET /api/user' doesn't match 'POST /logout
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.security.web.FilterChainProxy : /api/user at position 7 of 13 in additional filter chain; firing Filter: 'OAuth2ClientAuthenticationProcessingFilter'
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.s.w.u.matcher.AntPathRequestMatcher : Checking match of request : '/api/user'; against '/login'
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.security.web.FilterChainProxy : /api/user at position 8 of 13 in additional filter chain; firing Filter: 'RequestCacheAwareFilter'
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.security.web.FilterChainProxy : /api/user at position 9 of 13 in additional filter chain; firing Filter: 'SecurityContextHolderAwareRequestFilter'
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.security.web.FilterChainProxy : /api/user at position 10 of 13 in additional filter chain; firing Filter: 'AnonymousAuthenticationFilter'
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.s.w.a.AnonymousAuthenticationFilter : Populated SecurityContextHolder with anonymous token: 'org.springframework.security.authentication.AnonymousAuthenticationToken@905571d8: Principal: anonymousUser; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@0: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: DAE4649D11386D586A0CF739148E505A; Granted Authorities: ROLE_ANONYMOUS'
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.security.web.FilterChainProxy : /api/user at position 11 of 13 in additional filter chain; firing Filter: 'SessionManagementFilter'
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.security.web.FilterChainProxy : /api/user at position 12 of 13 in additional filter chain; firing Filter: 'ExceptionTranslationFilter'
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.security.web.FilterChainProxy : /api/user at position 13 of 13 in additional filter chain; firing Filter: 'FilterSecurityInterceptor'
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.s.w.u.matcher.AntPathRequestMatcher : Checking match of request : '/api/user'; against '/index.html'
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.s.w.u.matcher.AntPathRequestMatcher : Checking match of request : '/api/user'; against '/home.html'
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.s.w.u.matcher.AntPathRequestMatcher : Checking match of request : '/api/user'; against '/web/**'
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.s.w.u.matcher.AntPathRequestMatcher : Checking match of request : '/api/user'; against '/uaa/oauth/**'
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.s.w.a.i.FilterSecurityInterceptor : Secure object: FilterInvocation: URL: /api/user; Attributes: [authenticated]
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.s.w.a.i.FilterSecurityInterceptor : Previously Authenticated: org.springframework.security.authentication.AnonymousAuthenticationToken@905571d8: Principal: anonymousUser; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@0: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: DAE4649D11386D586A0CF739148E505A; Granted Authorities: ROLE_ANONYMOUS
2016-02-11 17:11:02.959 DEBUG 3242 --- [nio-8765-exec-4] o.s.s.access.vote.AffirmativeBased : Voter: org.springframework.security.web.access.expression.WebExpressionVoter@77816ac4, returned: -1
2016-02-11 17:11:02.960 DEBUG 3242 --- [nio-8765-exec-4] o.s.s.w.a.ExceptionTranslationFilter : Access is denied (user is anonymous); redirecting to authentication entry point
org.springframework.security.access.AccessDeniedException: Access is denied
/login
转发到 oauth 服务器。 URL 作为返回地址。这似乎是正确的方法。我想它会在 session 中保存一些信息,然后转发回初始请求页面(在我的情况下是
/web/index.html
)。
/api/user
的请求(代理到身份验证服务器)被拒绝。
http://localhost:8899/uaa/oauth/authorize?response_type=token&client_id=web&redirect_uri=http://localhost:8765/web/index.html
.首先我进入 oauth 服务器的授权页面。这是对的。单击授权后,请求将转发到 Web 应用程序 (
/web/index.html
)。所有静态内容都没有问题,但可以访问
/api/user
再次被拒绝。这次在 oauth 服务器中记录了一个错误:无效的访问 token :dff5121b-06e4-4bd7-b48e-08ad82d71404
最佳答案
zuul api 默认不转发 header 所以禁用它我们需要添加它
zuul:
sensitive-headers: Cookie,Set-Cookie
关于spring-security - Spring zuul代理不接受不记名 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35344450/
我有一个 spring boot 微服务,它需要基本的身份验证数据,即固定的用户 ID/密码(如管理员/密码)。我正在使用 Spring cloud netflix 生态系统来编排微服务。 祖尔 是我
我们的服务目前使用 spring cloud netflix zuul 作为我们的网关。 现在我们要支持websocket,所以我们需要将zuul 1迁移到zuul 2或spring cloud ga
使用 Zuul,我可以轻松定义在将请求转发到特定服务之前或之后激活的自定义过滤器。 有没有办法阻止请求在“预”过滤器级别转发,并立即将响应发送给客户端? 我知道“静态”过滤器可以做类似的事情,但我需要
通过 Zuul 向客户端发送请求时,Zuul 似乎更改了查询字符串。更具体地说,如果客户端应该收到一个 url 编码的查询字符串,Zuul 会对查询字符串进行一次解码。下面是一个具体的例子: 如果“h
我正在寻找一种可以在 API Gateway 中提供某种数据聚合的解决方案。我正在将 spring cloud netflix zuul 用于 API 网关。我使用 Spring Boot 创建了 3
我很难理解 Zuul 和 Ribbon 之间的联系。 我想我明白 Zuul 了。这是一个反向代理,我可以联系它来访问我的几个服务实例之一。它将使用循环算法或您对其进行的任何配置来选择正确的服务器。这是
我如何为多个 zuul 路由实现多个 zuulFallbackProvider。除了公开 restcontroller 并使用 hystrixcommand 实现方法之外,我看不到如何仅使用属性来做到
我是 Spring Cloud 的新手,在我的项目(使用 Spring Boot 构建的微服务项目)中,我使用了 Spring Cloud 版本 Brixton.RC2,并且运行良好。但是当我尝试将其
我在服务 A 和 B 前使用 Netflix Zuul 代理。 如何让 Zuul 代理根据传入请求中的 HTTP header 在 A 和 B 的路由之间进行选择? 最佳答案 您应该根据您的逻辑创建一
我读了 docs但我仍然不确定这两个属性之间的区别: zuul: ignored-headers: sensitive-headers: 如果您能用其他词来解释它,将不胜感激。 最佳答案 敏感
我想了解 Netflix Zuul2 和 Spring Cloud Gateway 之间的技术差异。 Spring Cloud Gateway 是异步的,Zuul2 也是如此 都支持Http2 都支持
我有以下简单服务: 交易核心服务和交易api服务。 transaction-api-service调用Transactions-core-service返回事务列表。 transaction-api-
主要问题是注册表的兼容性。如果没有,如何处理网关问题? 最佳答案 取决于你的意思。您可以在 Micronaut 应用程序前使用 Zuul 或 Spring Cloud Gateway 作为网关解决方案
我已经在 Eureka 服务器中注册了 UI 和后端应用程序。它已启动并正在运行(两个应用程序)。配置zuul application.yml: zuul: sensitive-headers:
我已经有一个基于微服务的应用程序运行在 Spring Cloud 上,并将 zuul 作为 API 网关,但由于公司用例,我们正在考虑更改为 Graphql 而不是传统的 Rest,因此我正在考虑为每
您好,特别是先生Josh Long !来自菲律宾的问候! 我只是想寻求有关 Zuul 问题的帮助。我正在使用 Config Server、Eureka Discovery、Zuul API Gatew
Zuul 屏蔽服务和指定路径 有时我们的一些后端服务并不想暴露出去 我们可以通过屏蔽服务或者路径的方式来进行实现: ### 网关配置 zuul: routes: dem
上图为一个微服务框架的简单示例,当有一个HTTP请求发送到服务器的时候,其实是先经过了Nginx的,再经过了网关,这里的网关就担任了拦截过滤的作用,既然拦截和过滤了,肯定就涉及到了请求的转发
Zuul:stripPrefix默认开启 true,去除 /** 前的所有前缀 SpringCloudGateway: 默认不开启,stripPrefix原理是过滤器,/a/b情况下, =1:去除/a
我们目前有一个直接的 Websocket 连接到一个后端 web 服务 来自我们的 UI 应用程序。现在,当我们尝试通过 Zuul(ApiGateway) 执行相同操作时,我们无法连接到后端服务 我们
我是一名优秀的程序员,十分优秀!