2012-05-25 139 views
1

我想構建自己的REST應用程序。其他應用程序和授權

我打算使用oAuth作爲主要認證方法。

問題是:我可以使用登錄名和密碼作爲client_id和client_secret(用oAuth規範)?

我沒有任何第三方應用程序,公司,網站等......這將驗證我的用戶。

我有我自己的REST服務器和JS應用程序。

整個網站將以通常的(RPC)方式製作,但某些私人部分將作爲RESTfull服務完成,並具有足夠的獨立JS應用程序。

更新:我不確定我甚至需要完整的oAuth支持。在我看來,我可以在https頁面上詢問登錄名和密碼,然後生成一些令牌。後來我可以用它來檢查這個用戶是否已經認證。但在這種情況下,這個oAuth幾乎和我們在網絡應用程序中的一樣。我不需要oAuth來激勵用戶?

我不認爲HTTP(s)自動化,因爲我不想發送evrytime用戶和密碼到服務器。

+0

你的意思是oauth_consumer_key和oauth_consumer_secret? –

+0

我猜肯定是這一個 – user1016265

回答

0

之一,如果存在的OAuth的主要原因是讓集成,而不影響用戶的用戶名和密碼。

如果您計劃使用用戶名和密碼,請查看xAuth作爲選項,如果您仍然想簽署您的請求。更多信息:https://dev.twitter.com/docs/oauth/xauth

但是,您可能也可以使用HTTP基本身份驗證。至少如果你通過SSL發佈你的API。更多信息:http://en.wikipedia.org/w/index.php?title=Basic_access_authentication

+0

通常oAuth用來授權第三方軟件與RESTfull服務器進行交互。但在我的情況下,我沒有這樣的。我只有JS(獨立)應用程序(我會說沒有任何其他頁面的JS Ajax應用程序,一切都會由Ajax加載)。我不想發送每次憑據,oAuth我只能使用令牌,但在我的情況下,它似乎像session_id – user1016265

+0

那麼,在這種情況下,您可以使用cookie身份驗證。假設您的js-client和服務器代碼位於同一個域中。但是,這只是你正在描述的正常的內部Web開發...... –

0

我想你可能會在security site上得到更好的答案。例如參見this question

無論如何,您需要先詳細評估您試圖預防哪些攻擊以及哪些攻擊「可以接受」。例如,如果您使用的是HTTPS,那麼您可能會接受中間人攻擊的其餘危險,因爲它需要僞造SSL證書。一般來說,如果重播攻擊是可以接受的,則很難說。

一個合理的解決方案是通過讓用戶使用用戶名和密碼通過HTTPS進行身份驗證,生成具有到期日期的安全令牌,然後將該令牌和過期日期發送回客戶。例如,您可以創建一個(合理的)安全令牌,方法是採用祕密的SHA1哈希加上用戶名和過期時間戳。然後,客戶端可以在將來的請求中包含令牌,用戶名和認證時間戳,並且可以使用您的祕密和時鐘對其進行驗證。這些不需要作爲3個參數發送;它們可以連接成一個字符串user|timestamp|token

+0

謝謝,我會檢查你給的鏈接,你能告訴我在access_token情況下,當它過期但是用戶仍在系統中工作時該怎麼辦?我應該在透明模式下重新生成它嗎? – user1016265

+0

@user,如果您想要生成新的令牌或要求用戶重新進行身份驗證,則取決於您。第一個更方便,第二個更安全。 –

0

使用SLI註冊您的應用程序。 SLI授予唯一的客戶端ID和客戶端密鑰,使您的應用程序能夠通過SLI API進行身份驗證。您還必須註冊應用程序的重定向URI以用於身份驗證和授權流程。

啓用您的應用程序與特定的教育機構,使該應用程序可以批准在這些地區使用。

在您的應用程序中配置和實施適當的OAuth 2.0身份驗證和授權流程,其中包括管理會話和授權超時。