2012-02-02 82 views
11

我正在構建一個帶有Java後端的Google App Engine Web應用程序,該應用程序嚴重依賴瀏覽器中的JavaScript/JQuery(您可以看到它here)。什麼是通過AJAX驗證用戶的最簡單安全的方式?

我想實現一個用戶認證機制,這也將依賴於AJAX(即他們將能夠註冊和登錄,而無需刷新頁面)。

我不想依賴Google的身份驗證,因爲我發現很多人都不願意放棄他們的GMail電子郵件地址,但我希望在將來通過Google/Facebook/Twitter等支持身份驗證。

我喜歡Reddit的用戶認證方法的簡單性。

我擔心的是,因爲人們不會通過HTTPS使用我的應用程序,所以我不希望通過HTTP以明文形式發送密碼。我還希望依賴某種祕密令牌(可能是密碼和一些服務器提供的「鹽」)的哈希,這可能會被攔截和欺騙。

與此同時,我不希望爲實現身份驗證機制付出巨大的努力。

有沒有一種方法可以給我想要的簡單性,但通過HTTP安全嗎?

編輯:我剛剛意識到Google App Engine確實支持HTTPS,但前提是您通過* .appspot.com網址連接您的網站。不幸的是,由於跨站點腳本的限制,你不能對此進行AJAX調用 - 儘管我猜想用JSONP可能會有這種情況。

那麼,是使用JSONP + HTTPS + *。appspot.com這裏最好的方法嗎?

回答

4

您必須使用https通過http進行安全通信。如果沒有它,沒有辦法通過瀏覽器進行安全通信。

如果您在appspot域中使用JSONP + https,您的用戶將看不到您的網站是安全的,並且您將無法以安全的方式保存Cookie。對我們來說,唯一的解決方案是直接向客戶展示醜陋的appspot.com域名。谷歌長期以來一直在說定製域上的SSL即將到來,但沒有日期。

編輯PS:如果你不需要你的客戶看到一個綠色的https,並且不需要以安全的方式保存cookie(也許是一個安全的模糊會話密鑰?),jsonp + https到* .appspot.com聽起來像一個聰明的解決方案,將工作。

+0

感謝您的答案,但恐怕揭露appspot.com域不是一個選項,它太難看了。我不介意用戶是否看到該網站是安全的。例如,Reddit通過HTTPS提交登錄信息,但用戶沒有看到它。我認爲沒有任何證據表明Reddit的採用受到缺乏*可見*使用HTTPS的限制。 – sanity 2012-02-02 15:15:02

+0

噢,我不確定我可以同意你*必須*使用HTTPS通過HTTP進行安全通信,因爲你總是可以在JavaScript和服務器上手動執行加密。當然,在初次下載JavaScript代碼的情況下,您仍然很容易受到MITM的影響,但我更擔心Eve比Mallory。 – sanity 2012-02-02 15:17:38

+0

如果你不想讓他們看到https,並且你不需要保存安全的cookie,那麼jsonp + https到appspot.com應該可以正常工作。也許你可以用JavaScript實現你自己的SSL,但是你提到你想避免重新發明輪子。而且......爲什麼要麻煩呢,如果它反正會受到MITM的影響呢?如果有人關心足夠的竊聽,最終有人會關心建立一個MITM。 – 2012-02-02 15:48:40

0

它真的是一個很好的問題,確實需要一些加密的深入瞭解。這是一篇文章,我發現有意思的一對夫婦一個月前的。他們有使用CRAM-MD5質詢 - 響應認證提出的解決方案。希望這可能會有所幫助。

http://en.wikipedia.org/wiki/CRAM-MD5

http://blog.stochastictechnologies.com/secure-authentication-over-http

問候。

+1

謝謝,還好我有加密的一個相當不錯的理解(應用密碼學是我最喜歡的書之一),但肯定你不應該只是推倒重來獲得安全認證? – sanity 2012-02-02 15:09:11

+0

:)但我沒有找到任何這種方法的可靠實施。當我們需要驗證時,大多數時候我們更喜歡使用https over http。 – 2012-02-02 16:14:27

+0

是的,我傾向於通過HTTPS的JSONP – sanity 2012-02-02 16:32:03

相關問題