Spring Security Cloud:通过ZUUL网关安全设置的UI服务

时间:2017-06-19 13:20:53

标签: java spring-mvc spring-security spring-cloud

我在UI服务中正确设置了我的身份验证和授权时遇到了问题。

我目前有以下设置(全部使用Spring。*和Spring Cloud。*):

- 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来访问webapp的某些部分。这是很多愚蠢的不必要的代码。我知道我无法理解如何将Spring Cloud安全性集成到我的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;
} 

也许有人遇到了类似的问题并找到了一个资源或示例,我可以使用它来将Spring Cloud Security正确地集成到我的UI服务中?

谢谢!

1 个答案:

答案 0 :(得分: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