2013-03-27 45 views
0

確保參數我想開發驗證的Web服務,它可以在一個Android應用程序可用於登錄並訪問其他服務。所以基本上,我通過HTTP請求發送憑據,並授予用戶訪問權限,如果一切順利的話。我需要保護這些證書,以防他們被不需要的用戶攔截。我應該使用什麼樣的REST Web服務

我使用日食與Tomcat的7號球衣給我休息web服務,Spring和Hibernate。 我的web服務是這樣的

@GET 
@Path("/login/{id}/{pass}") 
@Produces(MediaType.TEXT_HTML) 
public String login(@PathParam("id") int id,@PathParam("pass") String pass) { 
    String res="Null parameters"; 

    if(id!=0 && !pass.isEmpty()) 
    { 
     try { 
      User user = service.getOne(id); 
      if(user.getPass().equals(pass)) 
       res="Success"; 
      else 
       res="Fail"; 
     } 
     catch (Exception e) { 
      res="User not found"; 
     } 
    } 
    return "<html> " + "<title>" + "Result" + "</title>" 
    + "<body><h1>" + res + "</body></h1>" + "</html> "; 
} 

我使用它與瀏覽器進行測試,我沒有開始編寫客戶端呢。

我真的在這裏抓我的頭,我一直在尋找各地的網絡,一些正在談論的OAuth 2.0和他人HMAC,我不知道該用哪一個,如果有另一個梅索德請告訴我。

如果你知道如何實現安全到我的項目也將是巨大的一個有用的教程,其他任何建議,歡迎。非常感謝

回答

2

這真的取決於安全的需要,爲您的應用水平等。

有很多複雜的安全系統,但是對於大多數應用,這些都相當矯枉過正。

如果你只是去尋找密碼的一些基本的保護,無需處理付款或真的是你可以做以下簡單的事情敏感數據。

  1. 如果可以,請將您的服務移至https工作。所有的數據將被自動保護。

  2. 散列密碼。很多語言都已經爲簡單哈希(如MD5和SHA1)提供了內置支持,如果不是,您可以通過谷歌實現它們,它們經常被使用。 這意味着即使你不知道管理員的真實密碼。您只需將散列傳遞保存在數據庫中,然後比較散列。

  3. 在您的客戶端,鹽添加到您的散列。也許如果你谷歌第2步,這將已經在那裏,但否則它只是意味着你做一些像哈希(「132rjfASDF!」+密碼「+ vnsadfr1!Z」);使其更加隨機。可以很容易地實現

這些簡單的步驟,快捷,並提供服務所需的全部時間的最安全。 如果您真的在處理付款和敏感數據等問題,那麼您應該研究更嚴肅的解決方案。

ps。不要以爲使用'post'而不是'get'就是任何一種安全性,從Android的角度來看,使用這種安全性並不重要。人們不得不使用程序來獲取網絡連接,以查看鏈接(每個示例WireShark),並且讀取GET參數與讀取POST參數一樣簡單。

+0

我認爲散列對於我的應用程序已經足夠了,我不需要像保護這樣的聯邦調查局,而是關於辦公室命令(郵件服務)。我會看看那個。謝謝 – 2013-03-27 11:36:46

+0

是的,就像我說的大部分時間都足夠好。 Android/Java md5/sha1 hash在互聯網上有很多複製粘貼解決方案。祝你好運 :) – 2013-03-27 11:38:50

0

通常的用戶名和密碼發送徹底POST請求其隱藏它從用戶..這是很好的櫃面有人站在你的肩膀上,如果他們能看到的網址,然後他們可以看到你的用戶名和密碼...比使用SSL服務器端..

+0

是的,我知道GET方法是不正確的,POST是更好的,因爲它隱藏參數。但我需要發送這些參數加密,是SSL足夠? – 2013-03-27 11:29:59

1

上述答案中有一些混淆,實際上是問題本身。一些注意事項:

  • 首先,REST意味着無狀態。因此,您不應該擁有設置某種服務器端標誌的「登錄」功能,而應該通過每個請求的憑證
  • 處理憑證應該在澤西島中的過濾器而不是單個資源中完成方法。有堆棧溢出的各種示例顯示此
  • 如果您在服務器上存儲密碼,然後使用BCrypt將它們散列。 Bcrypt允許您撥打計算散列所用的時間,因此提供一些針對摩爾定律的未來防範措施
  • 您應該對所有通信使用HTTPS。它爲您提供了另一層廉價的安全和保護(無論如何,編程努力方面)
  • 如果您希望保護請求中的信息免遭篡改,那麼您應該看看類似Hawk的內容。這使您能夠保護您的請求頭和身體被篡改的能力,並且還可以作爲一種身份驗證機制,以及

還有很多更妥善保護您的REST端點,但如果你按照上面的你會有主要的觀點。

相關問題