在前篇的开发博客API案例中,我们详细介绍了如何在DRF中使用权限以及如何自定义权限实现了只有经过身份验证的用户可以创建文章并且只有文章的所有者可以编辑和删除文章。然而前篇文章中我们使用了Django默认的基于session的认证方式,实际前后端分离开发项目中后台更多采用的是token(令牌认证)。本文将详细介绍如何在DRF中使用不同的认证方案,并重点介绍如何使用DRF自带的token认证。
什么是认证(Authentication)?
身份验证是将传入的请求对象(request)与一组标识凭据(例如请求来自的用户或其签名的令牌token)相关联的机制。REST framework 提供了一些开箱即用的身份验证方案,并且还允许你实现自定义方案。
DRF的每个认证方案实际上是一个类。你可以在视图中使用一个或多个认证方案类。REST framework 将尝试使用列表中的每个类进行身份验证,并使用成功完成验证的第一个类的返回的元组设置 request.user
和request.auth
。
用户通过认证后request.user返回Django的User实例,否则返回AnonymousUser
的实例。request.auth通常为None。如果使用token认证,request.auth可以包含认证过的token。
注:认证一般发生在权限校验之前。
REST framework自带哪些认证方案?
Django REST Framework提供了如下几种认证方案:
Session认证
SessionAuthentication
类:此认证方案使用Django的默认session后端进行身份验证。当客户端发送登录请求通过验证后,Django通过session将用户信息存储在服务器中保持用户的请求状态。Session身份验证适用于与你的网站在相同的Session环境中运行的AJAX客户端 (注:这也是Session认证的最大弊端)。基本认证
BasicAuthentication
类:此认证方案使用HTTP 基本认证,针对用户的用户名和密码进行认证。使用这种方式后浏览器会跳出登录框让用户输入用户名和密码认证。基本认证通常只适用于测试。远程认证
RemoteUserAuthentication
类:此认证方案为用户名不存在的用户自动创建用户实例。这个很少用,具体见文档。Token认证
TokenAuthentication
类:该认证方案是DRF提供的使用简单的基于Token的HTTP认证方案。当客户端发送登录请求时,服务器便会生成一个Token并将此Token返回给客户端,作为客户端进行请求的一个标识以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。后面我们会详细介绍如何使用这种认证方案。
注意:如果你在生产环境下使用BasicAuthentication和TokenAuthentication
认证,你必须确保你的API仅在https
可用。
如何在DRF中使用你的认证方案 ?
方式1ÿ