Django前後端分離csrf token取得方式


需要
一般的にDjangoはcsrfの攻撃を回避するために開発され、Djangoのテンプレートレンダリングページを使用すれば、csrftokenのクッキーデータを要求にレンダリングすることができますが、前後の端分離が必要であれば、Djangoのテンプレートレンダリング機能は適用されません。どうやってcsrftokenを取得しますか?
Djangoはrequestによってcsfttokenを取得する方法を要求します。

from django.middleware.csrf import get_token
 
def getToken(request):
  token=get_token(request)
  return HttpResponse(json.dumps({'token':token}), content_type="application/json,charset=utf-8")
この方法を使うと確かにcsrftkenのデータが得られます。以下に例を書いてデモします。
Djangoバックエンド取得csrftoken例
ビュービューviews.pyでget Tokenメソッドを設定します。

from django.middleware.csrf import get_token
 
#   cstftoken
def getToken(request):
  token = get_token(request)
  return HttpResponse(json.dumps({'token': token}), content_type="application/json,charset=utf-8")
URLはurls.pyに設定されている。

from django.urls import path, re_path
 
from . import views
 
urlpatterns = [
 
  # ex:/assetinfo/getToken
  path('getToken', views.getToken, name='getToken'),
  ...
]
postmanテストインターフェースを使って、csrftokenを取得します。
 
今は基本機能を完成しました。csrftokを動的に取得できるかどうかは分かりませんが、もう一つのクロスドメイン問題があります。もしドメインを越えたらcsrftokenを獲得できません。
私はDjangoにドメインをまたいで帰る方式を設定したことがありますが、これはだめです。ドメイン名はcsftokenを使っていますので、元のcsrf攻撃を防ぐ意味がほとんどなくなりました。
一番いい方法は、nginxを使って本機の代理をして、それぞれフロントエンド、バックエンドのサービスを逆方向に代行して、ドメイン名を統一的に提供して使用すれば、csrftokenが使えます。
postman設定でcsrftokenを使用します。
postmanでcsrftokenを使用するには、取得したcsrftoken値をHeadersに設定すればいいです。
 

{"X-CSRFToken":"K6q7uqt9J8UocELWR04pw2DKd8T2LRNWjf2uQvsFBWm87Q1lJZQV1vj3pR8REzCR"}
設定しないと、403拒否エラーが発生します。
 
ここでは、Djangoの前後にcsrf tokenを分離して取得した記事を紹介します。Django csrf tokenに関するものがもっと多くなります。以前の記事を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。