2017-10-15 9 views
0

私はDjangoの残りFrameworkのドキュメントでこれを見つけた:RESTフレームワークでDjango Rest Framework SessionAuthenticationが認証されていないユーザにcsrfを必要としないのはなぜですか?

CSRFの検証が原因同じビューにセッションおよび非セッションベースの認証の両方をサポートする必要があるため、標準のDjangoには少し異なる動作します。これは、認証要求はCSRFトークンを必要とすることを意味し、CSRFは、これらの認証クラスを使用するデフォルトのDRFでは

トークンせずに匿名の要求を送信することがあります。両方のセッションをサポートするには、問題になり

'DEFAULT_AUTHENTICATION_CLASSES'= (
    'rest_framework.authentication.SessionAuthentication', 
    'rest_framework.authentication.BasicAuthentication' 
), 

何と認証されていないユーザ(SessionAuthenticationクラスを使用)のcsrfトークンをチェックしながら非セッションベース認証

答えて

0

cross site request forgeryを防ぐためにCSRFトークンが使用されています。こうすることで、それらのクライアントだけがサーバー上でレンダリングされたPOSTデータをWebサーバーに送信できるようになります。

djangoベースのプロジェクトでは、ログインページはこのdjangoによってレンダリングされるため、djangoにはこのページに有効なCSRFトークンが含まれています。ログインフォームが送信されたときに検証できるもの。

REST APIの場合、APIはフォームを前面に表示してはいけません。なぜそれが有効なCSRFトークンに依存しないのか。 djangoセッションを使用してAPIでユーザーを認証すると、APIを提供するdjangoがフォームをレンダリングします。この場合は、上記と同じ状況になります。

関連する問題