我在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服务中?
谢谢!
答案 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。