django rest framework authentication

身份驗證


身份驗證是將傳入請求與一組識別憑證(例如請求的用戶或其簽名的令牌)相關聯的機制。而後,權限和限制策略能夠使用這些憑據來肯定請求是否應該被容許。html

REST framework 提供了許多開箱即用的身份驗證方案,同時也容許你實施自定義方案。web

身份驗證始終在視圖的開始處運行,在執行權限和限制檢查以前,在容許繼續執行任何其餘代碼以前。django

request.user 屬性一般會設置爲 contrib.auth 包的 User 類的一個實例。json

request.auth 屬性用於其餘身份驗證信息,例如,它能夠用來表示請求已簽名的身份驗證令牌。後端

如何肯定身份驗證


認證方案老是被定義爲一個類的列表。 REST framework 將嘗試使用列表中的每一個類進行認證,並將使用成功認證的第一個類的返回值來設置 request.user 和 request.auth 。api

若是沒有類進行身份驗證,則將 request.user 設置爲 django.contrib.auth.models.AnonymousUser 的實例,並將 request.auth 設置爲 None.安全

能夠使用 UNAUTHENTICATED_USER 和 UNAUTHENTICATED_TOKEN 設置修改未經身份驗證的請求的 request.user 和 request.auth 的值。session

設置認證方案


默認的認證方案能夠使用 DEFAULT_AUTHENTICATION_CLASSES setting 全局設置。例如測試

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    )
}

基於 APIView 類的視圖上設置身份驗證策略網站

authentication_classes = (SessionAuthentication,)

API參考

BasicAuthentication

該認證方案使用 HTTP Basic Authentication,並根據用戶的用戶名和密碼進行簽名。Basic Authentication 一般只適用於測試。

若是成功經過身份驗證,BasicAuthentication 將提供如下憑據。

request.user 是一個 Django User 實力.

request.auth 是 None.

未經身份驗證的響應被拒絕將致使 HTTP 401 Unauthorized 的響應和相應的 WWW-Authenticate header。

SessionAuthentication

此認證方案使用 Django 的默認 session 後端進行認證。Session 身份驗證適用於與您的網站在同一會話環境中運行的 AJAX 客戶端。

若是成功經過身份驗證,則 SessionAuthentication 會提供如下憑據。

request.user 是一個 Django User 實例.
request.auth 是 None.
未經身份驗證的響應被拒絕將致使 HTTP 403 Forbidden 響應。

若是您在 SessionAuthentication 中使用 AJAX 風格的 API,則須要確保爲任何 「不安全」 的 HTTP 方法調用(例如 PUT,PATCH,POST 或 DELETE 請求)包含有效的 CSRF 令牌。

JSONWebTokenAuthentication

詳見jwt篇

相關文章
相關標籤/搜索