2017-03-21 12 views
3

私はDjangoでJWT認証を使用する方法を必死に理解しようとしています。Django JWT auth:ユーザーデータを取得するには?

このページでは、ユーザー名とパスワードに対するトークンを取得する方法について説明します。

http://getblimp.github.io/django-rest-framework-jwt/

$ curl -X POST -H "Content-Type: application/json" -d '{"username":"admin","password":"password123"}' http://localhost:8000/api-token-auth/ 

Now in order to access protected api urls you must include the Authorization: JWT <your_token> header.

1)どのように私は、ユーザーの詳細情報(ID、電子メールを取得することができます。)サーバーからの "ログイン"ユーザーの?私がセッションベースの認証を使用した場合、私はただシリアル化し、ログインしている場合はrequest.userを返します。私は、サーバが誰であるかを知ることができません。

2)私はそのページに記載されている手順がどのように安全であるか理解していません。なぜ、攻撃者はトークンをハイジャックして、自分が望むことをすることはできませんか?私が理解しているように、私はちょうどトークンを取得し、すべての要求で同じトークンを送り返します。これは本当のJWTですか?

答えて

7

JWTで典型的なDjango認証メカニズムを使用します。

  • あなたはユーザー名とパスワードでPOSTし、トークンを戻します。あなたの認証ビューには、次のパーミッションクラスを持っている必要があります:

    from rest_framework.views import APIView 
    
    class Authenticate(APIView): 
        permission_classes = (AllowAny,) 
    
  • あなたはそれがここを通過するトークンを送った次の時間:

    REST_FRAMEWORK = { 
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated', 
    ), 
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication', 
        'rest_framework.authentication.BasicAuthentication', 
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 
    ), 
    
  • 認証クラスはrequest.userを設定し、としてそれを使用することができますあなたは、通常、私も手順が説明する方法を理解していない)

2を行いますそのページのdは安全です。なぜ、攻撃者はトークンをハイジャックして、自分が望むことをすることはできませんか?私が理解しているように、私はちょうどトークンを取得し、すべての要求で同じトークンを送り返します。これは本当のJWTですか?

JWTリフレッシュトークンのメカニズムを調査する必要があります。トークンは通常短命ですが、デフォルトは5分と思います。

+0

確かな答え。また、トークン認証を使用する場合にのみ、httpsでapiを使用できるようにすることも不可欠です。 – Murphy4

+0

ありがとう@マーティン:) – arthankamal

関連する問題