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も必要がない。
トークンに有効期限も設定することも可能。
注意点は元の情報を復号できるためパスワードなどの機密情報は含めない。