如何使用Postman测试带有cookie身份验证的ASP.NET Core Web API?

5
我有一个ASP.NET Core MVC Web应用程序(.NET Core 2.1),它实现了Cookie身份验证,如下所示:
services.AddAuthentication(options => {
    options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
}).AddCookie(options => {
    options.LoginPath = "/account/login";
    options.LogoutPath = "/account/logout";
});

这个web应用还包括一个web API,客户端JavaScript通过Ajax调用返回给Web服务器。web API控制器使用[Authorize]修饰; 在Ajax调用访问web API方法之前需要用户登录web应用程序。

我想使用Postman(Windows本地应用程序)在localhost上运行Web应用程序时测试Web API调用。我如何从浏览器中复制验证cookie到Postman中以登录?

2个回答

13
要将浏览器中的 cookies 复制到 Postman,您需要使用浏览器的开发者工具和 Postman 的管理 cookies 功能。
  1. 启动并登录您的 Web 应用程序,并打开浏览器的开发者工具。
  2. 从开发者工具中,定位本地主机的 cookie 列表。以 Chrome(版本 73)为例,选择应用选项卡并展开 Storage > Cookies 选项。
  3. 从 Cookies 选项中,单击您的本地主机 Web 应用程序,例如 http://localhost:port。这将显示 cookies 列表。
  4. 已登录到您的 Web 应用程序后,应该存在一个名为 .AspNetCore.Cookies 的 cookie。复制该值,即它应该是一长串字符,例如 CfDJ8FNwIhImGGFJmGnb...
  5. 从 Postman 中创建请求以访问您选择的 Web API 方法,并查找请求的 cookies 选项。 以下是来自 Postman(v7.0.6)的示例: Postman (v7.0.6) Cookies option screenshot

  6. 从“管理 cookies”中添加新 cookie。以下是来自 Postman(v7.0.6)的示例:

    Postman (v7.0.6) Adding Cookie from Manage Cookies screenshot

  7. 应将占位符值从:

    Cookie_1=value; path=/; domain=localhost;

    .AspNetCore.Cookies=CfDJ8FNwIhImGGFJmGnb...简略缩短...; path=/; domain=localhost;

    点击发送。响应应该是来自Web API方法调用的数据或错误,而不是您登录页面的HTML。如果是登录页面的HTML,则Cookie或Cookie值很可能不正确。


-1
这不是API身份验证的工作方式。您需要发送一个带有某种令牌的Authorization头。通常,您会拥有一个集中式身份提供者,可以处理多个身份验证方案。Web应用程序实际上会通过客户端凭据与此身份提供者进行身份验证,并请求API范围。然后,您将获得授权该Web应用程序与请求的API一起工作的令牌。您在请求中传递令牌Authorization头,然后API将使用身份提供者验证令牌以确保它是授予访问权限的有效令牌。上述身份提供者可以是IdentityServer或托管解决方案,例如Auth0或Azure AD。
无论如何,您不会通过cookie进行授权。Cookie用于Web应用程序。API是无状态的,因此没有cookie。从Web应用程序到浏览器交换的cookie也无法用于API,因为它们不是同一件事情。

2
这篇文章不是关于API身份验证的工作原理。这是关于在使用cookie身份验证的API与MVC应用程序一起工作时,如何使Postman正常工作的步骤,无论正确与否。 关于“cookie交换……对于API不起作用”的问题,请按照步骤进行操作,它会起作用的。 - Chris Keith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接