1
0

More than 1 year has passed since last update.

Django Rest FrameworkでToken認証を実装する方法について

Posted at

前提

  • カスタムユーザを作成済み
  • テスト用データを作成済み

今回はカスタムユーザModelを作成して、employee_numberとpasswordでトークンを作成します
カスタムユーザを作成されたい方は以下の記事を参考にしてください

テスト用データを作成する際はfixtureを使うと効果的です
fixtureを作成されたい方は以下の記事を参考にしてください

認証の種類

Webで使われている主な認証方法は以下の通りです

  • Basic
  • Token
  • Json Web Token(JWT)
  • Session

今回はToken認証について具体例を交えながら解説していきます

Token認証

認証方式の一つで、HTTPヘッダにある一意のトークンを使用して認証します
作成されたトークンはデータベース内に保存されます

Django Rest Frameworkで再現してみよう!

Django Rest FrameworkでToken認証を設定するには以下のファイルを編集します

  • settings.py

settings.py

settings.pyに以下を追加します

settings.py
INSTALLED_APPS = [
"rest_framework.authtoken",
]


REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
    ],
}

settings.pyの設定を終えた後にマイグレーションを行うとauthtoken_tokenというテーブルが作成されます

mysql> desc authtoken_token;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| key     | varchar(40) | NO   | PRI | NULL    |       |
| created | datetime(6) | NO   |     | NULL    |       |
| user_id | char(32)    | NO   | UNI | NULL    |       |
+---------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

Tokenを発行してみよう!

本来はToken発行用のエンドポイントを作成しますが、今回はDjangoのShellを使ってTokenを発行します

python manage.py shell
Python 3.10.9 (main, Dec  8 2022, 01:35:40) [GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from rest_framework.authtoken.models import Token
>>> from application.models import User
>>> user = User.objects.get(employee_number="00000001")
>>> token = Token.objects.create(user=user)
>>> print(token.key)
cf4f9aa310f933333331082744c5dab67e29a5b9

authtoken_tokenテーブル内に

  • 該当するUser
  • トークン
  • 作成時間

が記録されていることが確認されます

mysql> select * from authtoken_token;
+------------------------------------------+----------------------------+----------------------------------+
| key                                      | created                    | user_id                          |
+------------------------------------------+----------------------------+----------------------------------+
| cf4f9aa310f933333331082744c5dab67e29a5b9 | 2022-12-18 11:29:36.033368 | 00000000000000000000000000000001 |
+------------------------------------------+----------------------------+----------------------------------+
1 row in set (0.00 sec)

右にあるAuthorizeボタンを押します
スクリーンショット 2022-12-18 20.48.06.png

Token <トークン>を入力し、Authorizeボタンを押すと認証完了です
スクリーンショット 2022-12-24 15.43.18.png

エンドポイントを操作できるようになりました
スクリーンショット 2022-12-17 12.04.37.png

以上です

記事の紹介

以下の記事も書いたので良かったら読んでみてください

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0