2017-06-19 68 views
0

我在我的UI服务中正确设置了正确的身份验证和授权问题。春季安全云:通过ZUUL网关安全设置的UI服务

目前,我有以下设置(所有利用春*春季云。*):

- Config Service; 
- Registry Service; 
- Gateway Service (Zuul); 
- Authentication Service (Spring Cloud Security, JWT); 
- Company backend service (db <-> rest); 
- Ui service; 

在后端安全的一切方面的工作,因为它应该:您请求JWT令牌通过凭据一个来自认证服务的网关,如果全部匹配,则通过REST返回。

公司服务意识到新令牌并在提交时验证它。

问题出在UI服务上。我现在做的是使用Spring Boot和Thymeleaf,并在前端部分中手动构建HttpHeaders,HttpEntity和Cookie对象,而无需使用Spring Cloud Security,以便访问Web应用程序的某些部分。这是很多愚蠢的不必要的代码。我知道我无法理解如何将Spring云安全整合到我的UI服务中。

这是控制器的方法(很丑陋)中的一个例子:

@RequestMapping("/firms") 
public String firm (Model model, 
        HttpServletRequest servletRequest, 
        HttpServletResponse servletResponse, 
        HttpSession httpSession) throws IOException { 
    final String returnPage; 
    Cookie cookie = authService.findCookie(servletRequest, servletResponse); 
    HttpHeaders httpHeaders = authService.createJwtAuthHeader(cookie); 
    HttpEntity requestEntity = new HttpEntity(httpHeaders); 
    ResponseEntity <UserObject> userObjectResponse = authService.createUserResponseEntity(requestEntity, servletResponse); 
    authService.setUserSessionDetails(userObjectResponse, httpSession); 
    if (userObjectResponse != null && userObjectResponse.getBody() != null) { 
     log.info(CommonMessages.GOT_COOKIE_FROM_AUTH_SERVICE.toString(), cookie.getName()); 
     returnPage = "firm"; 

    } else { 
     log.error(CommonMessages.NO_COOKIES_FOUND_NO_ACCESS_REDIRECTING.toString()); 
     httpSession.setAttribute("authorized", false); 
     returnPage = "error"; 
    } 
    return returnPage; 
} 

也许有人遇到了类似的问题,发现一个资源或一个例子,我可以为了整合春季云安全使用正确地进入我的UI服务?

谢谢!

+0

您是否发现http://docs.spring.io/spring-security/site/docs/4.2.3.RELEASE/reference/htmlsingle/#access-control-using-preauthorize-and-postauthorize? – Jeff

+0

@Jeff为了这个工作,我需要在UI服务中将我当前的设置与Spring Cloud Security集成。我不知道该怎么做。 –

+0

当前端向后端发送请求时,它必须传递令牌,这是在授权标头中完成的。我试图找到一个例子 – Jeff

回答

1

这里是你可能想看看进入一个方便的例子:https://github.com/ddewaele/spring-cloud-security-samples/blob/master/sample1/gateway/src/main/resources/application.yml

这里的主要思想是,以纪念与@EnableOAuth2Sso您服务,因此它可以表现为OAuth 2.0 Client。这意味着它将执行以下操作:

  • 将用户重定向到授权服务器,以便他们可以在其中输入凭据。
  • 预期在成功输入凭证后,将最终用户从具有授权码的授权服务器重定向回来。此授权码将自动交换为访问令牌。
  • 可以使用OAuth2RestTemplate来调用其他微服务,这些微服务将自动注入访问令牌给您的输出请求。在这种情况下,您所调用的微服务必须使用@EnableResourceServer进行注释,这意味着它需要访问令牌才能处理请求。

有关该主题的更多信息,您可以查看我的文章here

+0

我可以以某种方式与您联系关于此主题吗?如果可能的话,我真的需要你的建议! –

+1

是的,当然。欢迎加入这个组织:https://chat.stackoverflow.com/rooms/147391/spring-cloud-security –