django rest框架 - 理解身份验证和登录

时间:2015-05-30 12:36:46

标签: rest authentication login django-rest-framework

我是django休息框架(以及一般的REST)的初学者,我有一个服务器端(现在)有一个UserViewSet,允许注册新用户,我可以从我的Android应用程序POST到url很好(我得到201创建)。

我读了很多关于它的内容,但我似乎并不完全理解REST框架中的登录和身份验证的概念,特别是在django rest框架中,以及它是如何工作的。

你“登录”(例如在facebook中)然后你可以提出请求吗?

我理解\听说过:

您可以使用您的用户名和密码登录API \网站(假设您已经注册为用户而且您在用户数据库中)。

登录后 - 您将能够向仅允许登录\ authenticated用户访问的视图发出请求。

  • 这有点正确吗?我的意思是,你登录的是否有“登录”网址,就是这样?你是经过身份验证的吗?

  • 还可以在某处看到不是实际上是登录网址,并且您必须为每个请求添加用户名和密码,然后请求必须检查您的详细信息是否在用户数据库?

总结一下,我不确定在django REST框架中如何进行身份验证/登录(同样的事情?)并且非常感谢一个很好的解释或示例..

非常感谢!

1 个答案:

答案 0 :(得分:2)

在普通的Web应用程序中(从问题中删除API),用户将使用他们的凭据(用户名/密码,社交令牌等)“登录”并将收到会话cookie(由Django分配)允许他们代表用户(实际上,他们自己)在将来的请求中进行身份验证。此会话cookie在其系统上保留一段有限的时间(默认为两周),并允许他们自由使用该网站而无需再次进行身份验证。如果需要删除会话cookie,以使该人无法再进行身份验证,则Web应用程序通常会破坏会话cookie(或清除会话),这会有效“将其记录下来”。

对于API,一切都取决于身份验证的工作方式。

  • SessionAuthentication的工作方式如上所述,因为它使用Django的内部会话系统。
  • TokenAuthentication通过数据库支持的令牌(在Authorization标头中传输)而非会话cookie记住身份验证信息。
  • BasicAuthentication通过在每个请求上传递用户名和密码(通过Authorization标头编码的base64)对每个会话(无持久会话)进行身份验证。
  • 其他身份验证方法通常与TokenAuthentication的工作方式相同。

因此,以下是对提出的具体问题的一些答案

  

您是否“登录”(例如在Facebook中)然后您可以提出请求?

使用BasicAuthentication,您可以通过提供凭据“登录”每个请求。使用基于令牌的身份验证(TokenAuthentication,OAuth 2,JWT等),您“登录”以接收初始令牌,然后在每次请求时确认您的授权。

  

另外在某处读取实际上没有登录网址,并且您必须为每个请求添加用户名和密码,然后请求必须检查您的详细信息是否在用户数据库中?

这是basic access authentication您可以使用BasicAuthentication类在DRF中使用。