2017-06-19 72 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 –