django 認証方式編 ~セキュリティ~

drfの認証方式

1.Basic認証
(rest_framework.authenticaton.BasicAuthentication)
2.Cookie認証
(rest_framework.SessionAuthentication)
3.トークン認証
(rest_framework.authentication.TokenAuthentication)
4.リモートユーザー認証
(rest_framework.authentication.RemoteUserAuthentication)
5.JWT認証
(サードパーティを使用する)

Basic認証

ユーザー名やパスワードなどをBase64エンコードして、
そのトークンをリクエストのヘッダーに毎回書き込んで送信する。
ただ複合ができるのでセキュリティ的にWebアプリケーションにはというより検証に使う。

Cookie認証

サーバー側のセッションに情報を保存。
そのセッションを特定するためのIDをWebブラウザ側のCookieに保存して
リクエストヘッダにセッションIDをセットして送信することでサーバー側で判別する。
つまりサーバ側のセッションが管理している。
比較的簡単に導入できてDjangoAdminの管理サイトでも同じ方式。

トークン認証

DBにユーザーに1対1で紐付くトークンを発行して保存する。
ただ永続的にトークンが残るためセキュリティ的に少し問題がある。
そこでJWTでは有効期限が設定できる。

リモートユーザー認証

Webサーバに認証を委譲す、その結果として環境変数「REMOTE_USER」が設定していれば
認証をされているという認証方式。

JWT認証

認証情報を含んだJSON形式のデータをHTTPヘッダで送信できるように
エンコードしたトークンで署名を含んでいるために改ざんが検知できる。
トークン自体に認証情報が含まれているためユーザを特定することができる。
またDBも必要がない。
トークンに有効期限も設定することも可能。
注意点は元の情報を復号できるためパスワードなどの機密情報は含めない。