Django:基于DRF令牌的身份验证VS JSON Web令牌

时间:2015-07-24 00:57:36

标签: json django rest django-rest-framework tastypie

我正在构建一个真实世界的应用程序,用户将主要从Android,iOS设备和桌面访问该应用程序。

从我的初步研究中,我发现与基于会话的身份验证相比,基于令牌的身份验证机制对于客户端 - 服务器模型更加优雅和优雅。

在Django中,我找到了两种流行的方法 -

  1. http://www.django-rest-framework.org/api-guide/authentication/#tokenauthentication
  2. http://getblimp.github.io/django-rest-framework-jwt/
  3. 根据我的理解,选项2]是1的扩展,除了令牌是JSON(序列化)形式。我想了解选项1]和2]之间存在的其他差异以及选择其中的优缺点。

1 个答案:

答案 0 :(得分:24)

他们都执行类似的任务,几乎没有差异。

  

令牌

DRF的内置令牌身份验证

  1. 所有会话的一个令牌
  2. 令牌上没有时间戳
  3. DRF JWT令牌身份验证

    1. 每个会话一个令牌
    2. 每个令牌的到期时间戳
    3.   

      数据库访问

      DRF的内置令牌身份验证

      1. 获取与令牌关联的用户的数据库访问
      2. 验证用户的状态
      3. 验证用户
      4. DRF JWT令牌身份验证

        1. 解码令牌(获取有效负载)
        2. 验证令牌时间戳(到期)
        3. 获取与有效负载中的ID关联的用户的数据库访问
        4. 验证用户的状态
        5. 验证用户
        6.   

          赞成

          DRF的内置令牌身份验证

          1. 通过替换数据库中的令牌(例如:密码更改)
          2. 允许强制注销

            DRF JWT令牌身份验证

            1. 具有到期时间的令牌
            2. 除非令牌有效,否则没有数据库命中
            3.   

              缺点

              DRF的内置令牌身份验证

              1. 数据库命中所有请求
              2. 所有会话的单一令牌
              3. DRF JWT令牌身份验证

                1. 无法在数据库中跟踪令牌而无法召回令牌
                2. 签发令牌后,拥有令牌的任何人都可以提出请求
                3. 规范可以解释,对如何刷新没有共识