2012-02-13 49 views
6

在JavaScript中安全地進行Twitter OAuth認證的最佳方式是什麼?安全Twitter的OAuth認證JavaScript/jQuery(加上服務器端幫手)

我想寫一個程序,讓用戶分析他的Twitter使用情況和關注者/朋友。我已經編寫了一個使用python tweepy模塊的服務器端版本。

我想與人分享,但我希望它在瀏覽器中運行,以便在我的小型服務器上運行。

我看到了另一個問題,其中的結果是,它不推薦,而不是安全: JavaScript OAuth sign in with Twitter

這是有道理的,如果一個被髮送的應用程序的JavaScript消費者(應用程序)的祕密或訪問(用戶)的祕密。

但爲什麼我不能建立在服務器端喜歡這裏的URL - http://djangosnippets.org/snippets/1353/

然後從OAuth的工具Twitter的我的應用程序頁面上(不發送的驗證URL返回給瀏覽器,這樣的事情有效憑證)

GET &的https%3A%2F%2Fapi.twitter.com%2F1%2F &拿到%252Faccount%252Fverify_credentials_json%3D%26oauth_consumer_key%GD0bgcgMU4MDwNfKQpLFQS3%26oauth_nonce%3D24ad5049501dee1292afd8cf22307d68%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1329173626 %26oauth_token%uPUpxsBc3D283768289LtQ6R1E z1KeD8DOSsm5XpqJaKI28ysYh%26oauth_version%3D1.0

然後讓jQuery使用它來驗證用戶的憑證並運行分析。

這是一件重要的工作,我討厭這樣做,然後發現它不起作用或是一種不安全的方法。 (或已經完成)

這是否安全?它似乎沒有揭露任何祕密。

這會工作嗎?

任何指針/正確的方式來做一個jQuery noob的身份驗證的指針/示例,必要的授權:頭和Cookie /重定向處理?

我覺得我錯過了什麼,或者有一個原因,這將無法正常工作,或者它應該已經存在某處,但還沒有找到它。非常感謝!

回答

3

問題是McNuts先生,是oAuth要求你傳遞你的消費者祕密,所以即使你在服務器上構建URL,你仍然會將它傳遞迴網頁,這仍然會暴露你的消費者祕密通過HTTP代理。

爲了防止泄露您的祕密,您需要使用代理來執行Twitter身份驗證請求,並將oauth令牌返回給瀏覽器。如果你真的擔心規模,我會考慮像GAE或Heroku這樣的按比例收費解決方案。

+0

我認爲分裂消費者密鑰和消費者祕密的關鍵是你可以揭穿鑰匙,沒有祕密就沒人能做任何事情。 如果沒有消費者的祕密,那麼只有消費者的鑰匙可以做什麼? – 2012-02-14 00:36:25

+0

是的,你說得對。你基本上提出的是讓你的服務器用你的消費者密碼簽名,然後把它傳回給客戶端。你可以做到這一點,但它不僅僅是讓你的服務器代表用戶發出請求。 – Alan 2012-02-14 01:22:05

+0

是的,基本上我想代理認證,然後讓瀏覽器做一堆API調用。這將是幾百個電話,直到節流限制。另外,它們需要很長時間並在運行時綁定資源。所以我真的不希望在服務器上這樣做,會有更大的負載。想要將URL或標記傳遞迴瀏覽器,然後使用它來使用jQuery或純JavaScript進行API調用。 – 2012-02-14 01:32:34

0

我不明白你提出的方法。但一般而言,OAuth無法在瀏覽器客戶端安全地實現(除Java或Flash之類的安全關閉環境外)。在Javascript上實現OAuth過程是很有可能的,但是你會暴露你的祕密/消費者令牌。因此,任何人都可以用淘氣的意圖來取代應用程序,比如盜取用戶敏感數據。 如果你仍然想使用JS,我建議你在服務器端使用Node.js實現安全過程(認證和最終令牌存儲)