我有一個簡單的REST API,既需要從Web應用程序也可以從遠程服務訪問。Django:僅當某些條件適用時,CSRF檢查
遠程服務通過包含API密鑰的自定義HTTP頭進行身份驗證。
如何保護該API,使來自Web瀏覽器的請求受到CSRF保護,但是通過API密鑰進行身份驗證時CSRF檢查沒有完成?或者,一般來說,我怎樣才能針對特定視圖上的某些請求啓用CSRF保護,而不是其他問題?
目前,我有檢查的API密鑰的請求和認證API用戶大致這樣一個裝飾:
# Regular auth
if request.user.is_authenticated():
# DO CSRF verification, then continue calling the view
elif 'HTTP_X_API_KEY' in request.META:
api_key = request.META['HTTP_X_API_KEY']
user = authenticate(username=settings.API_USER_NAME, password=api_key)
login(request, user)
# If user is authenticated and autzorized, continue calling the view
# but WITHOUT invoking CSRF protection
的問題,說是,我只希望爲普通用戶CSRF保護,但不適用於API用戶。
您可以覆蓋csrf中間件並在那裏執行相同的檢查。這樣你就不必跟蹤需要保護的觀點。 – elssar