【问题标题】:Get session ID for a django site in javascript在 javascript 中获取 django 站点的会话 ID
【发布时间】:2015-05-13 21:47:12
【问题描述】:

如何使用javascript获取最终存储在cookie中的django会话ID?

我需要获取该 ID 的原因是我正在通过 REST API 执行所有操作,包括身份验证。因此,开发移动应用程序的人正在使用 ionic,他们希望向 API 发出请求以获取该会话 ID - 然后在未来的请求中使用它。有什么建议吗?

【问题讨论】:

  • 获取cookie有什么问题?默认名称为sessionid,但可通过SESSION_COOKIE_NAME 进行配置。请注意,我没有对这种方法的安全性做出任何评价 ;-)

标签: javascript django django-rest-framework django-sessions


【解决方案1】:

嘿,我认为这种方法不是最好的,你的后端在这里有一个用于 XSS 攻击的门,我认为你能做到的最好的方法是使用令牌进行身份验证,甚至是普通的 token.auth,这在 django 上有很好的解释- rest-framework docs http://www.django-rest-framework.org/api-guide/authentication/ 但我使用了很多 JWT JSONweb 令牌身份验证,因此除了令牌、用户名或其他自定义内容(如角色或您的应用程序逻辑具有的内容)之外,您不会损害其他数据,因为 ionic 其角度 JS 您可以查看http://frederiknakstad.com/2013/01/21/authentication-in-single-page-applications-with-angular-js/ 了解如何在前端移动应用上管理身份验证过程。

【讨论】:

    【解决方案2】:

    默认情况下,Django cookie 不适用于 Javascript,因为 SESSION_COOKIE_HTTPONLY 设置默认设置为 True,这是有充分理由的。您可以将其设置为 False,然后您的 cookie 将可以访问,但您的网站将是 more vulnerable to XSS

    【讨论】:

    • 那么,您会建议任何具体的不同方法吗?我可以在后端获取会话 ID,然后将其作为某些特定请求的上下文变量发送......或散列它。顺便说一句,谢谢您的回答。
    • 嗯,好问题。我不确定我是否对 Ionic 或您的设置了解足够多,无法提供任何真正好的建议。
    【解决方案3】:

    根据 codeadict 的回答:

    您可以使用 JSON Web Tokens,但它们涉及的更多一点。最简单的解决方案是使用令牌身份验证,您可以按照此处的说明进行设置:

    http://www.django-rest-framework.org/api-guide/authentication/#tokenauthentication

    当您使用 Ionic(在后台使用 AngularJS)时,一个可能更好的解决方案是一个名为 django-rest-auth 的包,专为您正在做的事情而构建。

    获取该设置的说明在此处http://django-rest-auth.readthedocs.org/en/latest/,他们还在此处发布了一个 AngularJS 模块:https://github.com/Tivix/angular-django-registration-auth

    不要忘记打开 HTTPS / SSL,因为没有它使用令牌身份验证是非常不安全的。

    上面链接的 Angular 模块会为您处理获取和存储这些令牌,然后您需要在向 api 发出的每个请求中包含访问令牌(通过 $http 或 $request 或其他方式)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-25
      • 2011-09-07
      • 1970-01-01
      • 2022-06-16
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      相关资源
      最近更新 更多