阅读文章如何在微服务中控制用户身份后,我一直在尝试实现这样的访问控制方案(值和引用令牌),但是在浏览了与Spring Security + OAuth + Zuul相关的多个其他主题和GitHub示例之后,我无法找到如何实现这一点的具体示例。所有涉及JWT的示例在返回令牌时都会返回用户详细信息,而我想避免这种情况。用户详细信息不应直接传递给客户端,而应传递给后端服务。教程Spring Security + AngularJs提供了很多关于如何将应用程序发展成为安全应用程序的信息,但使用了访问令牌或提到了通过JWT直接获取用户详细信息的可能性。
这个SO问题,使用Zuul作为认证网关由@phoenix7360提出,正是我一直试图实现的方法,但它只提供了一个简要概述,说明了实施微服务安全性方案所需的配置。请参考此问题中的图片,以清晰地了解它的工作原理。
我无法完全理解Zuul预过滤器应该如何配置,以及授权服务器的配置应该是什么样子的。正如文章和SO问题中所述,流程大致如下:
外部(HTTPS)
- 客户端对OAuth2服务器进行身份验证
- OAuth服务器返回一个不透明的访问令牌(只有UUID没有其他信息)
- 客户端将请求发送到API网关,并在Authorization标头中包含访问令牌
- API网关使用Authorization标头向OAuth服务器请求用户详细信息
- OAuth服务器检查访问令牌是否有效,并以JSON格式返回用户信息
内部(HTTP/S)
- API网关创建一个包含用户详细信息的JWT,并使用私钥对其进行签名
- API网关将JWT添加到请求中并转发到资源服务器
- 资源服务器使用API网关的公钥验证JWT
注意:如果OAuth服务器指示访问令牌不再有效,则API网关应返回错误。
ZuulFilter如何工作?是否需要发出针对OAuth服务器的新请求(例如,通过RestTemplate),或者这些方案是否受当前实现支持?对于OAuth和Zuul的JavaConfig类是否需要特定的配置?如果有人知道一个可行的示例,那将非常有帮助,并且对于以后涉及此主题的参考也很好。
我正在使用Spring Boot(1.4.0-M3)+ Spring OAuth + Spring Cloud(Eureka、Ribbon、Zuul)
我知道这个问题与之前链接的问题非常相似,如果这不是正确的做法,我很抱歉,但我认为开一个新线程比在SO线程上寻求解决其他问题更好。
提前感谢!