【问题标题】:Django JWT auth: How to get user data?Django JWT auth:如何获取用户数据?
【发布时间】:2017-08-12 14:38:06
【问题描述】:

我正在拼命地了解如何在 Django 中使用 JWT 身份验证。

此页面说明如何根据用户名和密码获取令牌:

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 吗?

【问题讨论】:

    标签: python django authentication jwt


    【解决方案1】:

    您将典型的 Django 身份验证机制与 JWT 结合使用。

    • 您使用用户名和密码发布并取回令牌。您的身份验证视图需要具有以下权限类:

      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 分钟。

    【讨论】:

    • 可靠的答案。使用令牌身份验证时,仅通过 https 使您的 api 可用也是很重要的。
    猜你喜欢
    • 1970-01-01
    • 2022-07-04
    • 2016-07-18
    • 2018-11-21
    • 2017-01-18
    • 2017-02-13
    • 2018-10-28
    • 1970-01-01
    • 2020-10-13
    相关资源
    最近更新 更多