使用API密钥对用户进行子类划分以区分管理员和应用程序



这是我的第一个API,所以如果我提出任何错误的声明,请原谅/纠正我。

我有一个应用程序,有一个API。我只希望拥有有效API密钥的外部应用程序(移动客户端等)能够访问它,我认为django-rest-framework的TokenAuthentication非常适合它;密码,我希望使用OAuth2Authentication。但我不希望使用TokenAuthentication的应用程序在数据库中有一个"用户"实例(因为它们不是传统意义上的用户),所以我正在考虑这样做:

class Client(User):
pass
django-rest框架表示request.user将是user的一个实例。如果我使用客户端,我会遇到任何问题吗
  • 这是处理这种情况的标准方式吗?我觉得不太对劲(主要是因为问题1)
  • 对于可以访问API的移动客户端,使用django-restframework的TokenAuthentication可以很好地工作。正如你已经确定的那样。您需要设计一种分发代币的机制。如果您是动态地这样做的,那么您将需要让您的API请求处理这个问题。

    移动客户端:(API初始请求)

    1. 请求/API/兔子/1/
    2. (没有令牌)

    服务器:401

    1. 令牌测试(失败)
    2. 通过HTTP 401响应"请登录"。(或其他一些自定义标头或响应信息)

    你可以定义你的api来实现这一点,大多数人使用http:401未经授权的错误代码。我指出这一点是因为这显然是一个设计决定。

    移动客户端:(请求登录)

    1. 提示用户输入用户名和密码,并发出请求/login/这可能是一个特殊的移动客户端登录,如/mobile/login/,其区别在于它在成功登录时会返回令牌

    服务器:200

    1. 验证有效用户并分发令牌。您可以编写这个逻辑,也可以使用我推荐的"rest_framework.authtoken.views.getarn_auth_token"。参见rest框架令牌身份验证以获取有关此方面的详细信息。注意它关于https的警告

    移动客户端:(请求API,在http头中使用令牌)

    1. 接收令牌
    2. 现在将初始请求重制为/API/rabbit/1/,并在头中使用其令牌

    服务器:200

    1. 验证头部中的有效令牌,并提供对API的访问。您将编写此代码

    最后:您需要设计一种策略来"老化"您的代币,和/或锁定用户。

    此外:请确保将"rest_framework.authtoken"添加到INSTALLED_APPS中,并确保调用manage.py syncdb

    除此之外:您不必特别使用TokenAuthentication(request.user,request.auth),您可以编写自己的代码来查看头部,并查看是否设置了令牌。使用python Cookie库可以很容易地做到这一点。您仍在大量使用django-rest框架的令牌管理功能。老实说,我认为关于配置"TokenAuthentication"身份验证后端的文档有点不完整。

    希望这能有所帮助!

    最新更新