2016-10-21 35 views
0

我有一個要求來保護我的JAX-RS資源,並且只接受源自授權移動應用程序的請求。這可能嗎?如何才能做到這一點?僅限我的移動應用程序將流量限制到服務器

我的所有資源都已經通過用戶認證得到了保護,這裏的目標是減少用戶ID釣魚嘗試。我知道一個解決方案是保持響應錯誤,並且無效的用戶ID通用,但應用程序非常大,目前這是不可能的。

我想出的一個想法是使用帶共享密鑰簽名的JWT令牌。然後我可以在服務器上添加一個授權過濾器來檢查簽名。如果它不驗證,則丟棄該請求。這聽起來像一個可行的選擇?

我擔心的是移動設備上的共享密鑰的安全性,它可能會被根設備損害嗎?

+0

這是一個類似的問題與一些想法:http://stackoverflow.com/q/28609526/2889165 –

回答

1

使用令牌是首選方式。但密鑰不共享。只有服務器才能訪問它。該密鑰用於生成JWT的消息認證碼(MAC)。由於祕密密鑰僅由服務器知道,因此沒有其他人可以生成具有有效簽名的JWT。 祕密可能被持續或應用範圍。

  • 一旦客戶端使用憑據進行身份驗證,服務器必須發送一個簽名的JWT給客戶端。
  • JWT必須包含必要的信息來識別客戶和州(如有必要)。
  • 然後客戶端將該令牌與所有其他請求一起發送到頭字段。
  • 服務器使用密鑰驗證JWT並處理請求。

即使客戶端可以更改智威湯遜身體,他不能得到它的驗證。這是使用簽名的關鍵。

+0

這不會阻止某人與流氓應用程序連接到我的服務器與有效的憑據並獲取有效的令牌。我試圖找到一種方法,只允許我的應用程序與我的服務器進行通信。 –

+0

爲了解決這種情況,您可能需要使用第三方服務。這是一個高級別[概述](http://android-developers.blogspot.co.il/2013/01/verifying-back-end-calls-from-android.html)。 – TMtech

相關問題