过去几天我一直在寻找如何做到这一点的最高点和最低点,并最终决定承认失败并请求帮助,拜托!
我跟随Dave Syer博士关于Angular和Spring Security的教程,特别是Zuul代理作为api网关,并使用Red Session的Spring Session(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);
Run Code Online (Sandbox Code Playgroud)
要经过身份验证然后由zuul路由,然后通过redis访问资源以访问经过身份验证的会话.
问题是会话似乎只在请求响应后才在网关中提交redis.所以发生的事情是,当我使用标头调用资源服务时,我可以看到在网关和会话中发生了成功的身份验证,但是由于会话之后没有处于redis状态,因此我在资源中获得了403通过zuul路由.
但是,如果我收到错误,请获取会话ID并将其添加到标头并再次尝试,因为现在我的身份验证会话在路由后可用于资源项目.
请有人指出我如何通过网关接听我的电话进行身份验证并在同一请求中路由吗?
谢谢贾斯汀