2014-06-11 156 views
1

我正在使用Django Rest框架和令牌認證。到目前爲止,一切都很好。Django Rest框架 - 阻止訪問API?

http://www.django-rest-framework.org/api-guide/authentication#tokenauthentication

但我意識到,任何人都可以創建一個第三方應用程序,掛鉤到我的API。我無法檢測到它或停止它。

我錯過了什麼嗎?我跟着指示,和我:

  • 發送「用戶名=等等&密碼=嗒嗒」到https://example.com/api/auth/,並接收返回的令牌。任何人都可以從第三方應用程序做到這一點。
  • 該令牌在身份驗證頭中傳遞以從API檢索數據。任何人都可以做到這一點,如果他們有用戶令牌。

即使用戶知道他們自己的令牌,我也只希望他們能夠通過官方原生應用訪問API。

1.我如何保護我的API(使用令牌認證)並確保只有我的應用可以連接到它?

2.我可以在頭文件中包含某種密鑰嗎?我在生產中使用HTTPS,標題以及表單數據(用戶名/密碼)可以截取/可讀嗎? (由運行應用程序的人員)。

還在學習,謝謝。

回答

0

也許我不明白你充分的問題,而是:

是的,每個人都用戶名和應用程序中的密碼可以創建令牌,如果您添加obtain_auth_token您urlconfig(你不必)。

,因此您可以:

  • 只給應用程序的用戶名和密碼,
  • 或取消obtain_auth_token查看和創建的管理員或手動的標記。

要回答你的問題HTTPS: HTTPS加密是客戶端和服務器之間,位於TCP和HTTP之間。因此,所有人(中間的一個人)都看不到任何標題,數據甚至路徑。當使用SNI時,主機名(Host標題)是可見的,但沒有別的。

希望這會有所幫助。

+0

每個用戶都需要一個令牌來識別,以便我不必在每個api調用中發送用戶名/密碼,所以我不認爲我可以刪除'obtain_auth_token'。 (也許我是誤解)。 「只給你的應用程序用戶名和密碼」是什麼意思? HTTPS,你說他們無法發現api網址?如果是這種情況,那可能足以阻止第三方應用程序。 – user2616836

+0

當您的API用戶應該能夠生成自己的令牌時,您需要'obtain_auth_token'。當然,他們需要使用用戶名和密碼進行身份驗證才能獲得令牌。 如果您只是爲每個用戶創建一個有效的標記(例如使用信號或自定義用戶模型或..),則不需要'obtain_auth_token',只需要爲用戶提供一種方法來獲取它們自己的令牌。 –

+0

我明白了,謝謝澄清。我瞭解生成令牌的不同方法,但還有什麼其他方法可以在不使用'obtain_auth_token'的情況下爲用戶獲取令牌? – user2616836