了解django-rest-framework中的SessionAuthentication?

时间:2015-11-11 05:18:53

标签: django authentication django-rest-framework

我正在使用Django v1.8和django-rest-framework v3.2.2。我有一个带有面向公众的API的站点,它也被我自己的站点(在同一域上)作为JavaScript应用程序的Ajax后端使用,仅使用GET。

我希望此API的公共用户在URL中被要求提供key参数,我将手动发布该参数。但我也希望我的JavaScript应用程序能够使用API​​,这意味着其他用户不仅可以窃取密钥并使用它。

我已经设置了自定义密钥身份验证as described here,但它运行良好。

但是,我不清楚JavaScript应用程序应该如何使用API​​。显然我可以在URL中传递一个专用的key参数,但是其他用户是否能够轻松地发现密钥并使用它?

我认为我需要SessionAuthentication,但我怎么开始做这项工作呢?我看不到有关如何更改JavaScript调用以使用它的任何说明in the DRF documentation

另外,我不明白SessionAuthentication如何允许Ajax应用程序进行身份验证,而其他用户无法查看和复制身份验证。

非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

  

我认为我需要SessionAuthentication,但我怎么开始做这项工作呢?我无法在DRF文档中看到有关如何更改JavaScript调用以使用它的任何说明。

SessionAuthentication是Django的一个。它使用会话来验证用户。它对于ajax请求大多是透明的,因为浏览器会自动发送cookie。但是,如果您要发布数据,则需要确保在标题和帖子正文中发送CSRF令牌。

  

另外,我不了解SessionAuthentication如何允许Ajax应用程序进行身份验证,而其他用户无法查看和复制身份验证。

如上所述,它使用cookie。它们是标题的一部分,因此通常在网址上看不到。 为了确保没有其他人可以窃取用户的会话,您需要通过https运行该网站。 这与常规网站没什么不同。