首页 文章

Django JWT auth:如何获取用户数据?

提问于
浏览
3

我正在拼命地了解如何在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)如何从服务器获取"logged in"用户的用户详细信息(id,email ..)?如果我使用基于会话的auth,我会序列化并返回 request.user ,如果它's logged in. I don't了解服务器如何知道谁是谁,如果没有任何auth相关的持久性 .

2)我甚至不理解该页面中描述的程序是如何安全的 . 为什么攻击者不能劫持令牌并做他想做的事情?据我所知,我只是得到一个令牌,然后在每个请求中发回相同的令牌 . 这甚至是真正的JWT吗?

1 回答

  • 8

    您使用典型的Django auth机制与JWT .

    • 您使用用户名和密码进行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)我甚至不理解该页面中描述的程序是如何安全的 . 为什么攻击者不能劫持令牌并做他想做的事情?据我所知,我只是得到一个令牌,然后在每个请求中发回相同的令牌 . 这甚至是真正的JWT吗?

    您绝对必须调查JWT刷新令牌机制 . 代币通常是短暂的,我认为默认是5分钟 .

相关问题