我一直在構建Symfony2(用於後端)和AngularJS用於前端的電子商務項目。目前Symfony部分僅用作API,其具有三個不同的用戶級別(來賓,客戶&admin)。可以在系統內進行(如添加/移除數據)不同的動作被固定:Symfony2 REST風格的API + AngularJS
1)Symfony2的與用戶角色/訪問控制
2)防火牆JMS安全額外(@PreAuthorize表達式)
對於安全的部件,一切都按預期工作,我對工作方式非常滿意。
問題:
有其是公共的(像檢索產品信息,類別等)的API的一部分。我在Angular中用Ajax調用我的API來檢索這些數據,該API返回JSON格式的數據。一個例子是:
/API /產品/ GET-所有/頁= 1 &數= 10 &排序[ID] = ASC
的問題是,任何人都可以看在瀏覽器中請求並複製路徑並訪問所有數據(如所有產品),並可以下載所有信息的JSON。雖然這些數據是「公開的」,但我不想給別人這樣一個「偷」我的數據的簡單方法。
理念&可能的解決方案:
1)我一直在尋找在JWT(JSON網絡令牌)的標準,試圖確保市民來電到我的API和我產生了這樣的方式實現它用於網站上的「真實」用戶的令牌,並且這種限制直接訪問公共API鏈接。
您認爲如何?這會是一個可能的解決方案嗎?
2)我也在閱讀關於StackOverflow的其他一些問題,我可以從請求中檢查HTTP_X_REQUESTED_WITH標頭,但我們都知道這可能很容易被攻擊者欺騙。 3)最後,我讀了類似的方法來解決方案1)在這裏:http://engineering.talis.com/articles/elegant-api-auth-angular-js/,但我不完全確定這符合我的目的。
其他注意事項:
- 我不想讓這個防彈的,但我也不想給人們點擊2個按鈕,讓我的所有數據的選項。我知道最終所有的信息都可以被「偷走」(例如,通過使用網絡刮板),但是「保護」系統使得人們不得不做出一點努力是我的想法。
- 我真的不能再模型我的API在這個階段太多,但任何想法,將不勝感激
感謝您抽出寶貴的時間來閱讀我的問題,我期待着任何反饋。
Azure的API管理你不能真正保障公衆的數據,因爲你_want_公衆能夠看到這些數據。你可以嘗試讓所有數據變得更加困難,但這就是全部。只要接受公共數據是公開的,並且將您的權力投資於更好,更有生產力的東西。 – smat88dd