我试图在Spring Boot的工作流程中实现上述架构。
我想确保我遵循正确的工作流程。
我想知道,是否有任何解决方案实现了类似的保护微服务API的解决方案。
我在以下方面感到困惑:
我知道这是一个有点冗长的问题,但我还没有找到一个合适的解决方案,以上架构。
我不确定您是否能够解决此问题,我可以看到这还没有回答,但是有一种方法可以将所有信息从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详细信息
我一直在努力解决基于spring云解决方案的微服务架构的安全设计问题。我只发现这篇文章对它有所启发:https://developer.okta.com/blog/2018/02/13/secure-spring-microservices-with-oauth
但它与Okta sso服务提供商有关,而不是其他诸如密钥斗篷之类的开放服务器的通用解决方案。
我还看到了一些关于如何使用 oauth2 服务器保护网关和微服务的解决方案,如下所示:https://github.com/jgrandja/oauth2login-gateway
但是它没有考虑到web客户端。
不幸的是,我没有完整的答案,只有一些部分:
一旦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 客户端信条。
我刚刚发布了关于这个主题的类似问题:通过oauth服务器通过spring网关和zool授权请求
更新:我发现了一篇描述几乎这种配置的文章(没有尤里卡,但这并没有增加我的经验中的复杂性):https://www.baeldung.com/spring-security-zuul-oauth-jwt,有一个带有源代码的github项目。不幸的是,源代码没有经过润色,因为作者正在将其用于商业课程。但我已经成功地从他的示例工作集中进行了构建。
摘要:在描述的体系结构中,每个资源服务器(微服务 A、B 等)都会接收由 zuul 代理/网关从请求客户端转发的 JWT 令牌。令牌在请求标头中转发。如果未提供有效的令牌,则网关会将请求重定向到授权页面。此外,每个资源服务器都可以使用 oauth 服务检查令牌,如果需要,可以按照我上面写的那样进行范围检查。
以下是不同的情况: 我的微服务A接收通过API网关并携带有效访问令牌的最终用户发起的请求(JWT,其作用域/声明对应于最终用户:用户名、id、电子邮件、权限等)。这个案子没问题。微服务拥有处理请求的所有信息。 第一个问题:如果微服务A需要调用微服务B会发生什么? null null 例如,微服务B中被调用的方法需要用户id才能工作。用户id值可以设置为查询字符串。如果使用用户访问令牌调用该方法,则
我正在为我们的应用程序使用Spring boot Microservices体系结构。在我们的项目中,我们使用的是OAuth2、Jwt、Zuul和Eureka服务,我的疑问是,我是否需要将这些服务作为一个独立的服务来实现,或者我是否可以将所有服务开发成一个单一的应用程序。 如果我必须作为单个应用程序实现,那么更好的方法是什么。请澄清
我最近读了不少关于微服务的文章,尤其是关于AuthN和Authz的文章。在很大程度上,这一切都很有意义,我可以看到这一切应该如何工作。 (注意--现在我只实现了客户端凭据授予和资源所有者密码凭据授予,因为我只是想看看它是如何工作的,而且用curl调用它们更容易。但我不知道这有什么不同)
我有一个名为country-service的微服务,它使用oAuth2受到保护。当我直接向该服务发送请求(包括我的JWT承载令牌)时,一切正常: 我还有一个api-gateway(Zuul代理): 除了这两个文件没有其他文件 注意:当我从资源服务器上删除oAuth2安全性时,Zuul代理似乎可以工作。 有人知道我在这里做错了什么吗?
我正在尝试设计一个JAAS微服务,它处理多个J2EE应用程序的用户身份验证。目前,我们有多个应用程序,它们根据LDAP进行身份验证,并具有独立的角色系统。现在我一直在设计应用程序和认证后端之间的接口。 通过自定义登录模块:设计一个自定义登录模块,使用我们登录服务中的非安全EJB接口进行身份验证和授权,但我记得读到登录模块不能注入EJB/使用EJB。 这是正确的起点,还是我有其他可能性从我们的应用程
null null myApp应用程序不能直接访问用户数据库,所有通信都只能通过用户认证微服务处理。 在过去的一周里,我广泛阅读了关于REST API中的授权/身份验证的内容,但仍然不知道如何为User->myApp和MyApp->User-Authentication微服务构建一个可靠的授权/身份验证系统。 这是我现在想出来的。 null Now, user signs in sending u