2015-09-23 83 views
0

可有一個人請讓我知道什麼都確保使用彈簧安置寫在春季啓動項目RESTful Web服務的方式(沒有用戶憑據檢查,因爲該服務是通過遠程調用應用坐在不同的服務器上)如何保護RESTful Web服務,而無需使用認證

問題陳述:

我有一個休息類和方法,其應當由另一遠程應用程序訪問。遠程應用程序不會發送除主體內容和內容類型之外的任何內容。在這種情況下,我怎樣才能保護這個休息服務,以便只有特定的遠程應用程序才能訪問服務。

@RequestMapping("/rest") 
@RestController 
public class WorkflowController { 

    @RequestMapping(value = "ticket/create", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) 
    @ResponseStatus(HttpStatus.CREATED) 
    @ResponseBody 
    public Long startWorkflow(@RequestBody TicketInfo ticketInfo) { 
     ...//DO SOMETHING 

     Long id = 1L; 

     return id; // return some long value 
    } 

} 

請提出實現這個目標的方法。 在此先感謝

回答

1

好吧,所以我不知道我是否完全理解你的問題,但生病asume不同的情況。 說你的客戶端應用程序坐落在一個 靜態IP,你可以創建一個過濾器和IP地址的白名單,這將是非常簡單的,而且很可能不夠好。

如果那不是這種情況,你可以使用參數GET或POST並重新創建一個過濾器,你就必須發送身份驗證串在你第一次調用來獲取認證。你還必須實現身份驗證管理器。

 if(hsr.getParameter("ex_code") != null){ 
      String exCode= hsr.getParameter("ex_code"); 


      String userToken = new String(Base64.getDecoder().decode(hsr.getParameter("ex_code"))); 

      PreAuthenticatedAuthenticationToken token = new PreAuthenticatedAuthenticationToken(serviceThatReturnsAUserDetailsFacade.loadUserByUsername(userToken), 
        exCode); 

      token.setDetails(authenticationDetailsSource.buildDetails((HttpServletRequest) request)); 

      try { 


       authentication = authenticationManager.authenticate(token); 
      .... 
+0

我無法通過身份驗證機制來保護我的Web服務,因爲我的應用程序沒有其他應用程序的用戶詳細信息。我想知道如何安全地在我的應用程序和其他應用程序之間共享我的Web服務? 你能告訴我最好的方法嗎? –

+0

如果不需要驗證,您可以使用SSL。如果您使用的是spring-boot,則可以通過編輯屬性文件輕鬆實現此目的。客戶可以拿到鑰匙。 – jstuartmilne

0

如果您不希望實現的任何安全&只是想驗證主機&端口(僅一個應用程序可以在特定主機&端口上運行),並假設你使用Spring,那麼你可以簡單地取以下從傳入的HttpServletRequest: -

a) RemoteAddr -> IP address of machine from which request originated. 
b) RemoteHost -> Host name of machine from which request originated. 
c) RemotePort -> Port of machine from which request originated. 

已經制定一個接口方法,這將驗證這一&如果有效,則允許其經歷而如果無效則返回各自的錯誤味精客戶。

除此之外還有另外一個選擇也被稱爲「匿名授權」,詳情here

+0

我想實現安全性,但用戶將無法通過用戶名和密碼。 注意:我的應用程序沒有其他應用程序的用戶詳細信息,所以我無法保證我的基於身份驗證的網絡服務 那麼如何在這種情況下保護我的web服務? 您能否讓我知道行業標準方法? –

+0

請檢查我上面的答案的最後一行是否爲你的用例。 – Avis