![](/img/trans.png)
[英]How to implement Microservices with Authentication Server(OAuth2,0 and JWT), Zuul and Eureka services?
[英]Implementing authentication and authorization using Zuul Proxy, Oauth2 on REST Microservices
我正在尝试使用 Spring Boot 在工作流中实现上述架构。
我想确保我遵循正确的工作流程。
我想知道是否有任何解决方案实现了类似的用于保护微服务 API 的解决方案。
我有以下困惑:
我知道这是一个有点冗长的问题。 但是我还没有找到上述架构的合适解决方案。
不幸的是,我没有完整的答案,只有一些部分:
一旦 JWT 令牌可用于 zuul 代理,那么每个微服务都可以通过配置其资源服务器来授权请求,例如
@Override
public void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests().anyRequest().access("#oauth2.hasScope('microserviceA.read')").and()
.csrf().disable()
.httpBasic().disable();
}
范围可以由带有数据库的 oauth 微服务管理 - 基于客户端凭据,它将获取范围信息并编码为 JWT 令牌。
我目前不知道的是 - 如何让 zuul 代理使用“Web 客户端”凭据来通过 oauth 对其进行授权 - 我不想硬编码 zuul 代理凭据,因为这样 Web 客户端凭据就赢了不会被利用。
我刚刚发布了关于这个主题的类似问题: Authorizing requests through spring gateway with zool via oauth server
更新:我发现文章描述了几乎这种配置(没有尤里卡,但从我的经验来看,它并没有增加太多复杂性): https : //www.baeldung.com/spring-security-zuul-oauth-jwt ,那里是带有源代码的github项目。 不幸的是,源代码没有被完善,因为它被作者用于他的商业课程。 但是我已经设法从他的示例工作集构建。
总结:在所描述的架构中,每个资源服务器(微服务 A、B、..)从请求客户端接收由 zuul 代理/网关转发的 JWT 令牌。 令牌在请求标头中转发。 如果没有提供有效的令牌,则网关会将请求重定向到授权页面。 此外,每个资源服务器都可以使用 oauth 服务检查令牌,如果需要,可以像我上面写的那样进行范围检查。
我一直在努力解决基于 Spring Cloud 解决方案的微服务架构的相同安全设计问题。 我只发现这篇文章对它有所了解: https : //developer.okta.com/blog/2018/02/13/secure-spring-microservices-with-oauth
但它与 Okta sso 服务提供商有关,而不是其他 oauth2 服务器(如 keycloak)的通用解决方案。
我还看到了一些关于如何使用 oauth2 服务器保护网关和微服务的解决方案,如下所示: https : //github.com/jgrandja/oauth2login-gateway
但它没有考虑到 Web 客户端。
我不确定您是否能够解决这个问题,我可以看到这还没有得到解答,但是有一种方法可以将所有信息从 JWT 传递到所有下游微服务。 编写您自己的 ZuulAuthenticationFilter,然后创建以下方法
private void addClaimHeaders(RequestContext context, String token) {
try {
Map<String, Claim> claims = jwtTokenVerifier.getAllClaims(token);
claims.forEach((key, claim) -> {
context.addZuulRequestHeader("x-user-info-"+key, String.valueOf(claim.as(Object.class)));
});
}catch(Exception ex) {
log.error("Error in setting zuul header : "+ex.getMessage(), ex);
}
}
这样,您将在每个微服务的标头中从 JWT 获取信息,以“x-user-info-”开头的标头将包含您的 JWT 详细信息
在以下链接中有上述架构的实现: https : //www.baeldung.com/spring-security-zuul-oauth-jwt
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.