如何在IdentityServer ASP.NET Core中使用Postman调用带有AntiForgeryToken的API

问题描述 投票:0回答:3

我正在尝试使用 Postman 与 Identity Server Asp.net Core 测试我的 API。

这就是我正在尝试做的方式:

  1. 第一个请求
    HttpGet
    到 https://localhost:5000/Account/Login 以及我收到的响应正文中:
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8MoS9upoM4dNp8Kx-AdvA-uYr13_PAkuMZpzYMV8UmxZq5GdLTvN-Ht5NpTLmPtlhL5d5z2Hu2vUJoJGhk1AMlARDcOwqgq7Cef1dfQL_vl4tIFM4kx9RZPz8DHU26-U9qLnKAIstZgR42-1FuGNh24" />

在 Cookie 中(虽然不确定它是什么):

  1. 然后
    HttpPost
    使用从
    RequestVerificationToken
    请求正文收到的令牌,通过
    HttpGet
    访问 https://localhost:5000/Account/Login。

并且始终

error 400
,正如您在上面的屏幕截图中看到的那样。

在 Visual Studio 中,我可以看到某些请求被捕获,但显然是不正确的。

如果我删除属性

[ValidateAntiForgeryToken]
,那么当然一切都会正常工作,但显然,因为验证已被禁用。

asp.net-core asp.net-identity postman identityserver4
3个回答
4
投票

您需要执行以下操作才能发送此类请求:

1.) 在 x-www-form-urlencoded 中输入 __RequestVerificationToken 键值(不要忘记双下划线)

2.) 您需要将 .AspNetCore.Antiforgery cookie 添加到 Postman 的 Cookies 部分。

比如像这样 .AspNetCore.Antiforgery.1XHiLFgQI2w=您的cookie值;路径=/;域=本地主机;过期=会话;

您可以在 Google 开发者工具的“应用程序”部分找到 .AspNetCore.Antiforgery cookie

.AspNetCore.Antiforgery cookie in Google Developer Tools picture

Add cookie in Postman picture


1
投票

为此花了很多时间。

我做了几件事:

  1. 设置环境并添加变量。
  2. 添加了一个预请求脚本...
    • 使用 pm.SendRequest 获取页面
    • 使用cheerio查找第一个名为__RequestVerificationToken的输入字段并获取其值
    • 将环境变量设置为从字段检索的值
  3. 发送表单数据(因为我使用的是 asp.net core,模型的值),如 x-www-form-urlencoded
  4. 最后但并非最不重要的一点是,我添加了 __RequestVerificationToken 作为表单数据中的键值对之一,并将其设置为使用已设置的变量

我发布这个答案的主要原因是最后一个,我在网上看到很多东西表明名称应该是RequestVerificationToken,但这不起作用,只会导致400响应(错误的请求)。


-2
投票

在postman中,您需要将内容类型设置为形式url编码。

并在标头中发送请求验证令牌作为“RequestVerificationToken”

但是,如果您只需要不记名令牌,那么您需要调用

 POST https://<your identity server>/connect/token

© www.soinside.com 2019 - 2024. All rights reserved.