为第三方创建api令牌

时间:2013-07-24 01:09:10

标签: python django

我正在开发一个第三方有兴趣与我们整合的应用程序。我想为每个用户创建一个令牌,并想知道django中最有效和最常用的方法是什么?我试图找到一个,发现这看起来很有希望:

https://github.com/jpulgarin/django-tokenapi

显然开箱即用它不会起作用,但我可以类似地实现它。上述项目主要使用sha散列算法。使用这个或MD5用于api令牌是否安全?任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:2)

当您选择API密钥时,您正在寻找的两个因素是

  1. 无法猜测。这意味着您的密钥必须是随机的,并且它太长而无法强行

  2. 是唯一的。表示没有两个用户可以意外获得相同的API密钥。您可以使用数据库唯一性约束来强制执行此操作。

  3. 请记住,如果您只使用1个密钥,则必须在所有api端点上启用SSL。在运输途中被盗的钥匙很糟糕,M'kay?

    现在,为了实现,如果您使用自己的自定义视图来提供API,那么https://github.com/jpulgarin/django-tokenapi应该适合您。

    如果您使用TasyPie或类似产品,则可能需要使用其内置授权码,包括api-key管理。

    http://django-tastypie.readthedocs.org/en/latest/authentication_authorization.html#apikeyauthentication

    http://django-rest-framework.org/api-guide/authentication.html#tokenauthentication

答案 1 :(得分:1)

我一直使用TastyPie http://django-tastypie.readthedocs.org/en/latest/authentication.html#apikeyauthentication提供的API密钥。

来自models.py

    def generate_key(self):
        # Get a random UUID.
        new_uuid = uuid.uuid4()
        # Hmac that beast.
        return hmac.new(str(new_uuid), digestmod=sha1).hexdigest()