适当选择Web应用程序使用的python REST API的身份验证类

Dav*_*vid 12 python authentication django rest django-rest-framework

我想使用Django REST框架构建REST API.最初它的客户端将是一个Web应用程序,但可以想象未来的客户端可能包括移动应用程序.

不幸的是,我发现文档中列出的身份验证类列表有点令人困惑.看起来TokenAuthentication会满足我的需求.我宁愿避免OAuth的认知开销,除非有一个令人信服的安全理由去那样做.

这是我想在这个早期阶段做出决定的决定.有人可以提供任何建议吗?

编辑:虽然希望不相关,但我想我会提到我将使用Neo4j作为应用程序的后端,而不是传统的SQL数据库.

Kev*_*own 35

Django REST Framework为您提供了多种身份验证方法的灵活性.由于我有一些时间,并且对将来有类似问题的访问者有用,我将概述最常见的身份验证方法的好处.

最初它的客户端将是一个Web应用程序,但可以想象未来的客户端可能包括移动应用程序.

通常,当使用位于同一域上的Web应用程序和使用Django实例作为API时,大多数人SessionAuthentication在使用现有身份验证方法与服务器交互时使用.身份验证无缝运行,因此您无需执行第二个身份验证步骤.

大多数API也支持某种形式BasicAuthentication,很可能是因为它最容易测试,但也因为它是最容易实现的.对于您的Web应用程序,这不是推荐的身份验证方法,但对于您的移动应用程序,它的使用情况并不少见.我个人会推荐基于令牌的身份验证,因此您不必担心客户端会拦截用户的凭据.

看起来TokenAuthentication会满足我的需求.

许多人使用TokenAuthentication它是因为它理解和使用起来相对简单,并且它似乎首先满足了每个人的需求.令牌直接附加到用户,并且它们不会自动旋转(尽管您可以使它们自动旋转),因此代表用户工作的每个客户端都会获得相同的令牌.如果您需要撤消令牌,这可能是一个问题,因为所有其他客户端也会使其令牌失效.

我宁愿避免OAuth的认知开销,除非有一个令人信服的安全理由去那样做.

OAuth 2(OAuth2Authentication)在优点的基础上为您提供令牌轮换和令牌过期TokenAuthentication.还有一个好处是能够在不影响为用户进行身份验证的其他客户端的情况下撤销单个令牌.您还可以通过使用范围将客户端限制到API的各个区域,如果您使用的API的某些区域比其他区域更常用,则这非常有用.

我还要提到JSON Web Tokens,因为虽然我没有使用它,但它在支持渠道中已经出现了很多.它的工作方式与TokenAuthentication检索令牌非常相似,但它具有客户端和令牌过期的唯一令牌的额外好处.

  • 这是一种外交上的回答。你能用更详细和特征表示来解释每个主题吗? (3认同)