Django前後端分離csrf token取得方式
需要
一般的にDjangoはcsrfの攻撃を回避するために開発され、Djangoのテンプレートレンダリングページを使用すれば、csrftokenのクッキーデータを要求にレンダリングすることができますが、前後の端分離が必要であれば、Djangoのテンプレートレンダリング機能は適用されません。どうやってcsrftokenを取得しますか?
Djangoはrequestによってcsfttokenを取得する方法を要求します。
Djangoバックエンド取得csrftoken例
ビュービューviews.pyでget Tokenメソッドを設定します。
今は基本機能を完成しました。csrftokを動的に取得できるかどうかは分かりませんが、もう一つのクロスドメイン問題があります。もしドメインを越えたらcsrftokenを獲得できません。
私はDjangoにドメインをまたいで帰る方式を設定したことがありますが、これはだめです。ドメイン名はcsftokenを使っていますので、元のcsrf攻撃を防ぐ意味がほとんどなくなりました。
一番いい方法は、nginxを使って本機の代理をして、それぞれフロントエンド、バックエンドのサービスを逆方向に代行して、ドメイン名を統一的に提供して使用すれば、csrftokenが使えます。
postman設定でcsrftokenを使用します。
postmanでcsrftokenを使用するには、取得したcsrftoken値をHeadersに設定すればいいです。
ここでは、Djangoの前後にcsrf tokenを分離して取得した記事を紹介します。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に関するものがもっと多くなります。以前の記事を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。