如何查询经过身份验证的Django应用程序?

Sreejith Ramakrishnan

我想使用cURL测试一些API。我尝试执行GET,如下所示:

curl --user username:password --request GET http://my_domain/get_result/52d6428f3ea9a008358ad2d8/

在服务器上,它显示为“ 302”(表示重定向,对吧?)。我猜测它已重定向到“登录/”页面。

完成这项工作的正确方法是什么?

编辑:我试过:

curl -c cookies.txt -b cookies.txt -L -d @login_form.txt http://my_domain/login/

其中login_form.txt包含“ username = username&password = password&this_is_the_login_form = 1”。不起作用 没有生成cookies.txt文件。而且没有登录发生。您能告诉我如何使用cURL实现登录Django吗?

彼蒂诺

这是一个完整的编码答案。解决方案的想法是:

  1. 您必须先使用GET访问登录页面,以生成Cookie文件,
  2. 然后从cookie文件中解析CSRF令牌
  3. 并使用POST请求进行登录,并通过传递数据-d

之后,您可以始终使用数据($DJANGO_TOKEN中的CSRF令牌或自定义X-CSRFToken标头执行任何请求要注销,只需删除cookie文件。

请注意,您需要一个Referer(-e)来使Django的CSRF检查满意。

LOGIN_URL=https://yourdjangowebsite.com/login/
YOUR_USER='username'
YOUR_PASS='password'
COOKIES=cookies.txt
CURL_BIN="curl -s -c $COOKIES -b $COOKIES -e $LOGIN_URL"

echo -n "Django Auth: get csrftoken ..."
$CURL_BIN $LOGIN_URL > /dev/null
DJANGO_TOKEN="csrfmiddlewaretoken=$(grep csrftoken $COOKIES | sed 's/^.*csrftoken\s*//')"

echo -n " perform login ..."
$CURL_BIN \
    -d "$DJANGO_TOKEN&username=$YOUR_USER&password=$YOUR_PASS" \
    -X POST $LOGIN_URL

echo -n " do something while logged in ..."
$CURL_BIN \
    -d "$DJANGO_TOKEN&..." \
    -X POST https://yourdjangowebsite.com/whatever/

echo " logout"
rm $COOKIES

我有一个稍微更安全的代码版本,该代码使用文件提交POST数据,作为GitHub上的Gist:django-csrftoken-login-demo.bash

有趣的关于Django CSRF令牌的背景知识在docs.djangoproject.com上

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

应用程序如何从 Azure Active Directory 验证经过身份验证的令牌?

如何在Blazor应用程序中仅对经过身份验证的用户响应图像数据?

如果Firebase表包含来自更多经过应用程序身份验证的用户的数据,如何进行迭代?

如何从 Google Identity Aware Proxy 后面的网络应用程序访问已经过身份验证的用户?

多个Django应用程序,共享身份验证

Django 在“身份验证”应用程序中缺少迁移

使用多个应用程序处理 django 身份验证

在 django 应用程序中集成 ebay 身份验证

使用Chimp / Mocha测试Meteor应用程序-自动登录以测试经过身份验证的路线

从Blazor应用程序中的Middleware类获取经过身份验证的用户

在 SAPUI5 应用程序中获取经过身份验证的用户 ID

在 Vue 应用程序中为经过身份验证的用户获取数据的最佳位置?

如何将 BIGGERkeysses 禁用到在 django 中构建的身份验证应用程序中?

应用程序的身份验证概念

如何使用GraphQL构建经过身份验证的查询?

Azure移动应用程序中的应用程序身份验证。如何?

如何使用Azure Active Directory在ASP.NET Core应用程序中获取经过身份验证的用户的名称

使用Django会话身份验证通过angular4应用程序实现中央身份验证系统

使用.Net Core中的Windows经过身份验证的应用程序填充来自SQL的自定义声明

如何在 OWIN 应用程序中使用 cookie 身份验证和 WsFederation 身份验证

GraphQL的GitHub API身份验证:如果需要身份验证,如何公开发布我的应用程序?

OneDrive 文件的守护程序应用程序身份验证

如何将基于声明的身份验证应用于.NET 4应用程序?

无法在 django 的内置身份验证应用程序中删除用户

Django Rest Framework + Angular.js Web应用程序中的用户身份验证

Django应用程序的DB用户在AWS中身份验证失败

Tomcat身份验证和特定的Web应用程序身份验证

使用OAuth对EWS应用程序进行身份验证

在Java应用程序中使用NTLM身份验证