如何在Django和Drf中使用httponly cookie实现token认证
How to implement token authentication using httponly cookie in Django and Drf
我正在使用 django 和 Drf 构建一个应用程序,目前使用 vanilla JS 作为前端。
我在网络上搜索了几乎所有不同用例的身份验证用例,我发现了不同的链接,但这些链接似乎总是支持 session 身份验证和令牌身份验证。
使用 Django 帮助我们将 session 身份验证作为默认身份验证,因此我决定研究使用令牌身份验证的身份验证过程。
在执行此操作时,我最初使用 localstorage 作为用户身份验证后从后端响应获取的令牌的存储,但出于某些有效的原因,大多数 devs/engineers 建议不要使用 localstorage,因为它容易受到 xss 攻击..
所以我决定实现 httponly cookie 方法,但我还没有看到它在 Django 上的实际应用,我已经看到了实现所有这些的理论,但还没有看到有人这样做过..
请问如何使用 httponly cookie 将我的令牌存储为 DJANGO 的 cookie
编辑
我知道 httponly cookie 不允许 JavaScript 访问 cookie,所以我决定这样做。
Django 发送带有令牌的 cookie httponly 作为 cookie
用户向后端发出请求
服务器从作为后端请求发送的 cookie 获取令牌。
4)“问题出在哪里” 我无法在 Django 中将令牌设置为 header,我尝试使用 request.headers['Autho...] = Token 。 ...
但这不允许项目分配..
所以如果我的逻辑是正确的,这就是我被困的地方
EDIT 所以这一次,我现在可以从服务器添加一个 header,使用 request.META 通过令牌传递授权密钥....价值,这似乎工作正常,而不是必须使用 request.headers 来传递作业..
但是发生了让我震惊的事情,尽管我能够从服务器更改或添加授权令牌,但视图仍然给我一个错误,就像我根本没有传递令牌一样。 ...
这就像经过所有的努力,一切都没有改变,除非它是从客户端请求的。
我想我现在必须坚持使用 localstorage,但仍要进行更多研究或等待答案。
我已经使用 httponly cookie 完成了令牌身份验证..
我记得当我提出问题时,这里的一些有爱心的人提供了帮助,但我们无法看到直接的答案,因为我们还必须进行研究和思考...
我使用的步骤是这样的。
Django 接收用户凭据
Django 验证凭据
用令牌交换该数据
我们使用以下方法将令牌设置为 cookie
set_cookie(.... , httponly=True)
** 那么现在是真正锻炼的时候了。
我创建了一个中间件,它将负责将令牌设置为 header dict 中的授权密钥 .. 而不是允许客户端执行此操作。
---- 客户端无法处理这个,因为它现在是一个 httponly 标志,它将阻止 js 访问它,因为使用 httponly 的目的是为了防止 tokens/cookies 通常存储在浏览器中时的 xss 攻击存储
然后我们根据自己的喜好处理中间件,就像我尝试确保它只适用于某些视图而不适用于所有视图(将计划为其制作自定义装饰器)
然后最后是看到我在没有之前的教程的情况下创建这样的东西时我们会很开心并微笑...
GitHub 回购 link https://github.com/HarryAustin/tweeter-DrfTest-httonlycookie
我正在使用 django 和 Drf 构建一个应用程序,目前使用 vanilla JS 作为前端。
我在网络上搜索了几乎所有不同用例的身份验证用例,我发现了不同的链接,但这些链接似乎总是支持 session 身份验证和令牌身份验证。
使用 Django 帮助我们将 session 身份验证作为默认身份验证,因此我决定研究使用令牌身份验证的身份验证过程。
在执行此操作时,我最初使用 localstorage 作为用户身份验证后从后端响应获取的令牌的存储,但出于某些有效的原因,大多数 devs/engineers 建议不要使用 localstorage,因为它容易受到 xss 攻击..
所以我决定实现 httponly cookie 方法,但我还没有看到它在 Django 上的实际应用,我已经看到了实现所有这些的理论,但还没有看到有人这样做过..
请问如何使用 httponly cookie 将我的令牌存储为 DJANGO 的 cookie
编辑 我知道 httponly cookie 不允许 JavaScript 访问 cookie,所以我决定这样做。
Django 发送带有令牌的 cookie httponly 作为 cookie
用户向后端发出请求
服务器从作为后端请求发送的 cookie 获取令牌。
4)“问题出在哪里” 我无法在 Django 中将令牌设置为 header,我尝试使用 request.headers['Autho...] = Token 。 ... 但这不允许项目分配.. 所以如果我的逻辑是正确的,这就是我被困的地方
EDIT 所以这一次,我现在可以从服务器添加一个 header,使用 request.META 通过令牌传递授权密钥....价值,这似乎工作正常,而不是必须使用 request.headers 来传递作业..
但是发生了让我震惊的事情,尽管我能够从服务器更改或添加授权令牌,但视图仍然给我一个错误,就像我根本没有传递令牌一样。 ...
这就像经过所有的努力,一切都没有改变,除非它是从客户端请求的。 我想我现在必须坚持使用 localstorage,但仍要进行更多研究或等待答案。
我已经使用 httponly cookie 完成了令牌身份验证..
我记得当我提出问题时,这里的一些有爱心的人提供了帮助,但我们无法看到直接的答案,因为我们还必须进行研究和思考...
我使用的步骤是这样的。
Django 接收用户凭据
Django 验证凭据
用令牌交换该数据
我们使用以下方法将令牌设置为 cookie set_cookie(.... , httponly=True)
** 那么现在是真正锻炼的时候了。
我创建了一个中间件,它将负责将令牌设置为 header dict 中的授权密钥 .. 而不是允许客户端执行此操作。 ---- 客户端无法处理这个,因为它现在是一个 httponly 标志,它将阻止 js 访问它,因为使用 httponly 的目的是为了防止 tokens/cookies 通常存储在浏览器中时的 xss 攻击存储
然后我们根据自己的喜好处理中间件,就像我尝试确保它只适用于某些视图而不适用于所有视图(将计划为其制作自定义装饰器)
然后最后是看到我在没有之前的教程的情况下创建这样的东西时我们会很开心并微笑...
GitHub 回购 link https://github.com/HarryAustin/tweeter-DrfTest-httonlycookie