2014-02-26 153 views
0

我只是使用Attribute/Filter爲每個WebAPI Action開發一種身份驗證機制。我沒有使用「BuiltIn」授權功能,因爲我想使用我的存儲過程和表結構。身份驗證WebAPI

我要求WebAPI用戶在每個請求中提供用戶名和密碼,作爲請求標頭的一部分。用戶名和密碼以清晰文本形式傳輸,但配置爲僅通過HTTPS(SSL)工作的WebAPI。

我的安全顧問告訴我,即使通過HTTPS(SSL)將用戶名和密碼作爲明文傳輸也不安全,並要求我加密證書。

這樣做的簡單方法是什麼?他在Cookie上建議,但我不確定WebAPI客戶端可以使用Cookie,因爲WebAPI用戶不僅僅是瀏覽器客戶端,其中一些用途是服務器到服務器。

感謝

回答

3

這是不正確的做法,也沒有遵循OAuth規範。

如果要爲每個請求提供重新認證的標頭,則應構建一個授權服務器以生成唯一的加密時間戳標記。在每個請求上傳遞該令牌並對其進行身份驗證,而不是憑據。這樣,您只能公開憑證一次,並且在您的令牌被成功攔截並解密的情況下,出現帳戶損失的可能性要小得多。

如果您需要使用OAuth的庫與現有的認證服務器(谷歌等)的幫助,看看http://dotnetopenauth.net/

+0

我明白了你的意思,謝謝。你能解釋第一次如何加密憑證嗎? – Omtechguy

+0

當然,根據提供商的不同,您會提交您的憑證,並且授權服務器會爲您返回令牌。如果您的身份驗證服務器使用Google之類的內容,用戶將提交您從未見過的Google憑據。如果您創建自己的支持驗證服務器,用戶將向您提交他們的憑據,您需要發出加密的令牌。無論如何,你應該返回一個加密版本的憑證。這破壞了整個點並創建了一個安全循環漏洞。 –

0

如果您正在使用的網絡API 2,你應該看看owin基於OAuth認證。它的工作方式是在首次登錄後您將獲得oauth標記,並且您將不得不在隨後的請求中發送oauth標記。欲瞭解更多信息,請閱讀Dominick Baier的博客 - http://leastprivilege.com/category/oauth/

+0

感謝您的回覆。請解釋一下,如果使用owin,用戶名和密碼將在客戶端加密,並且如何? – Omtechguy

+0

您將不得不對令牌進行加密。授權服務器將返回加密的令牌,並且在隨後的請求中,您必須傳回加密的令牌。 – Yousuf