2013-05-16 182 views
0

我在安全的ASP.NET網站上有一個Web服務REST API,需要登錄才能工作。以編程方式請求用戶名/密碼的最安全方式是什麼? (剛加入?username=me&password=mysecret到URL似乎並不那麼安全,我(儘管這是一個HTTPS連接)保護REST API的用戶/密碼

回答

2

有幾種方法可以實現你所需要的:

  • [錯路]可以將用戶名和密碼與查詢字符串一起傳遞,理論上這種做法沒有任何問題,但是這種URL(http://example.com?username=me&password=mysecret)通常由瀏覽器,代理等緩存,從而利用其他人可能會遇到的潛在風險使用這些存儲的數據訪問受保護的數據
  • [好的方法]爲了消除與緩存b的能力有關的「幾乎所有」風險羅西斯,代理等,而且爲了使用HTTP協議的標準特性,你必須處理特殊的HTTP Authorization header

的HTTP授權標頭:

  • 如果使用HTTP 小號連接,則可以使用該方法Basic Access Authentication

    授權頭構造如下:

    1. 的用戶名和密碼被組合成一個字符串「用戶名:密碼」。
    2. 然後使用Base64編碼生成的字符串文字。
    3. 然後將授權方法和空間即「基本」放在編碼的字符串之前。

      例如,如果用戶代理使用「阿拉丁」作爲用戶名和「芝麻開門」作爲密碼,然後報頭被形成爲如下:

      Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

  • 如果使用HTTP連接,那麼你應該使用Digest Access Authentication方法。由於HTTPS連接更復雜且無用,因此如果您願意,我可以讓您詳細瞭解它(可能還有here)。

+0

我想強烈反對你的介紹性條款「理論上這種做法沒有錯」。將憑證放入URL中是完全錯誤的,即使在理論上也是如此 - 這與您陳述的原因完全相同。即使您使用SSL/TLS進行加密,也只會影響HTTP請求的內容。該URL始終以明文形式發送。因此,方案一不僅僅是利用潛在的風險,而是錯誤的。 – user2690527