【发布时间】:2016-04-17 13:01:18
【问题描述】:
这几天我真的在苦苦思索如何做到这一点,终于决定认输求救!!!
我遵循了 Dave Syer 博士关于 Angular 和 Spring Security 的教程,特别是将 Zuul 代理作为 api 网关并使用 Spring Session 和 Redis (https://github.com/spring-guides/tut-spring-security-and-angular-js/tree/master/double#_sso_with_oauth2_angular_js_and_spring_security_part_v)
我遇到的问题是我通过网关从具有以下标头的外部应用程序调用资源休息服务:
String plainCreds = "user:password";
byte[] plainCredsBytes = plainCreds.getBytes();
byte[] base64CredsBytes = Base64.getEncoder().encode(plainCredsBytes);
String base64Creds = new String(base64CredsBytes);
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Basic " + base64Creds);
被认证,然后被zuul路由,然后资源通过redis访问认证会话。
问题是会话似乎只在请求响应后才提交到网关中的 redis。所以发生的事情是,当我使用标头调用资源服务时,我可以看到网关和正在创建的会话中发生的成功身份验证,但是由于会话在其之后不在 redis 中,我在资源中得到了 403通过zuul路由。
但是,如果我收到错误消息,请获取会话 ID 并将其添加到标头并重试它,因为现在我的经过身份验证的会话在路由后可用于资源项目。
请有人指点我如何通过网关让我的电话在同一个请求中进行身份验证和路由?
谢谢 贾斯汀
【问题讨论】:
-
你解决了吗?我也有同样的问题。
标签: spring-security spring-cloud spring-session