[英]How to prevent desktop apps from mimicking browser requests?
我有兩個用 .netcore 編寫的 Web 應用程序, App 1
提供 html 內容, App 2
是提供 Javascript 請求的 API,兩者都在同一個解決方案中,但當然每個都有不同的端口。 我的場景是瀏覽器從App 1
返回網站,其中包括注冊表單和 javascript 訪問App 2
上 API 上的注冊功能。
為了防止 API 被任何其他網站訪問,我啟用了CORS
並添加了App 1
的域作為唯一允許訪問App 2
的 API 的域,它運行良好,但任何桌面都可以模仿相同的請求標頭並訪問API,我用郵遞員測試,API 被訪問。
因此,我添加了 Authorization 標頭,以便所有 API 函數都需要授權JWT bearer
令牌才能訪問。
問題是如何阻止桌面應用程序或其他非瀏覽器應用程序訪問它。原因如下:
1- 如果我將訪問令牌放在來自App 1
的響應中,以便 javascript 可以使用它來訪問App 2
,則任何其他應用程序都可以輕松獲取它並將其復制粘貼到他們的應用程序中,並且將訪問 API。
2- 如果我不在App 1
的響應中硬編碼令牌,而是讓 javascript 訪問生成令牌的路由,那么任何應用程序都可以這樣做,因為它們可以模仿瀏覽器的相同請求標頭。 然后 CORS 將毫無用處。
所以我該怎么做 ?
.. 但任何桌面都可以模仿相同的請求標頭並訪問 API,我用郵遞員進行了測試,並訪問了 API。
確實如此,某些 http 客戶端(例如curl
)能夠在向服務器發出請求時更改Origin
標頭。 因此, CORS
不應該是您保護 App 2 的唯一安全措施。
因此,我添加了 Authorization 標頭,以便所有 API 函數都需要授權 JWT 不記名令牌才能訪問。
是的,這是一個很好的決定,但您不必保護所有api 端點。 你可以讓一些 api 對公眾開放,例如登錄或注冊。
問題是如何阻止桌面應用程序或其他非瀏覽器應用程序訪問它。因為...
通常,您的 App 1(我假設它是基於 JavaScript 的 Web 客戶端)在加載時不應包含任何令牌,相反,它應該調用 App 2 的登錄 API 並取回 jwt 令牌。
App 1 可以緩存令牌,並在 App 2 上調用受保護的 API 時使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.