2016-09-26 177 views
0

我已經使用Jersey 2.x爲我的應用程序實現了REST API。我使用REST方法是因爲我計劃在稍後添加移動應用程序。現在它只是一個網絡應用程序。我正在考慮安全問題。有兩件事我需要處理。通過REST API進行身份驗證並保護API本身

  1. 對用戶進行身份驗證和授權:現在,我通過HTTP使用HTTP基本身份驗證。但有沒有更好的方式,而不是讓用戶通過電線發送用戶名和密碼。我知道這是通過HTTPS,但我正在探索。想到OAuth 1.0a。我在正確的軌道上嗎?
  2. 保護API本身:我不希望除了我的web應用程序之外的任何其他客戶端都在白名單中。稍後我會將我的移動應用程序添加到此白名單中。我在想象一些祕密鑰匙來識別這個客戶?

我想上面的#1和#2都可以用OAuth 1.0a來完成,但它們是兩種不同的實現方式,它們是受保護和授權的。他們能共存嗎?你能否向我提供關於如何開始和現實世界中的一些例子的任何指示?

這裏有很多信息,但安全並不是我的強項,我試圖通過自己編寫自己的應用程序來理解它。

+0

[API密鑰vs HTTP身份驗證與OAuth在RESTful API中的可能重複](http://stackoverflow.com/questions/6767813/api-keys-vs-http-authentication-vs-oauth-in-a- restful-api) –

+0

有什麼特別的理由提及OAuth 1.0a,而不是使用OAuth 2.0/OpenID Connect? –

+0

說實話,我還沒有研究OAuth 2.0。這就是爲什麼。 – motiver

回答

0

我的第一個建議是讓你看看OAuth 2.0,我不打算討論它是比OAuth 1.0a更好還是更差,但它似乎有更廣泛的採用,因此它會更容易你在網上找資源; OAuth2還將很多安全功能存放在HTTPS的肩膀上,您似乎已經在使用它。

關於HTTP基本驗證比較的OAuth2我會檢查this answer一些優點和缺點,但在大局方面:使用基本身份驗證

全憑據總是包含在每個請求,而使用OAuth2它是每個請求中包含的訪問令牌。

關於確定了密鑰的每個客戶端應用程序,這在OAuth2用戶確實是支持,但是,如果您計劃(本地)移動應用程序,你有一個很大的挑戰,因爲未來這些應用程序不能真正保守祕密(攻擊者可以對您的應用程序進行逆向工程並找到祕密)。

總之,對於傳統的網絡應用程序,很容易確保您的API只允許訪問授權用戶,該用戶確實正在使用您的白名單應用程序。如果你想打開你的API到原生移動應用程序,你將很難證明這個電話真的來自你的授權應用程序之一。

有關常見OAuth2場景的示例,我會檢查Auth0 Architecture Scenarios