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

Posted

技术标签:

【中文标题】如何使用 Postman 使用 cookie 身份验证测试 ASP.NET Core Web API?【英文标题】:How to test ASP.NET Core Web API with cookie authentication using Postman? 【发布时间】:2019-08-23 17:24:13 【问题描述】:

我有一个实现 Cookie 身份验证的 ASP.NET Core MVC Web 应用程序 (.NET Core 2.1),如下所示:

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] 装饰;要求用户通过 Web 应用程序登录,然后 Ajax 调用才能访问 Web API 方法。

我想在本地主机上运行 Web 应用程序时使用 Postman(Windows 原生应用程序)来测试 Web API 调用。登录后如何将身份验证cookie从浏览器复制到Postman?

【问题讨论】:

【参考方案1】:

要将 cookie 从浏览器复制到 Postman,您需要使用浏览器的开发工具和 Postman 的管理 Cookie 功能。

    运行并登录到您的 Web 应用程序,然后打开浏览器的开发者工具。 从开发人员工具中,找到 localhost 的 cookie 列表。以 Chrome(版本 73)为例,选择应用程序选项卡并展开存储 > Cookies 选项。 从 Cookies 选项中,单击您的 localhost Web 应用程序,例如http://localhost:port。这将显示 cookie 列表。 登录到您的 Web 应用程序后,应该存在一个名为 .AspNetCore.Cookies 的 cookie。复制该值,即它应该是一长串字符,例如CfDJ8FNwIhImGGFJmGnb...

    从 Postman 创建一个请求以访问您选择的 Web API 方法并找到该请求的 Cookies 选项。 以下来自 Postman (v7.0.6) 的示例:

    在“管理 Cookie”中,添加一个新 Cookie。以下来自 Postman (v7.0.6) 的示例:

    占位符值应从以下位置更新:

    Cookie_1=值;路径=/;域=本地主机;

    .AspNetCore.Cookies=CfDJ8FNwIhImGGFJmGnb...为简洁起见...;路径=/;域=本地主机;

    点击发送。响应应该是从 Web API 方法调用返回的数据或错误,而不是登录页面的 html。如果是登录页面 HTML,那么 cookie 或 cookie 值很可能不正确。

【讨论】:

【参考方案2】:

这不是使用 API 进行身份验证的方式。您需要发送带有某种令牌的 Authorization 标头。您通常会有一个可以处理多个身份验证方案的集中式身份提供者。 Web 应用程序实际上将通过客户端凭据向此身份提供者进行身份验证并请求 API 范围。然后,您将获得一个令牌,该令牌授权该 Web 应用程序使用所请求的 API。您将令牌与您的请求一起传递到 Authorization 标头中,然后 API 将使用身份提供者验证令牌,以确保它是授予访问权限的有效令牌。上述身份提供者可以是 IdentityServer,也可以是 Auth0 或 Azure AD 等托管解决方案。

无论如何,您都不会通过 cookie 进行授权。 Cookie 用于 Web 应用程序。 API 是无状态的,因此没有 cookie。从 Web 应用程序交换到浏览器的 cookie 无论如何都不适用于 API,因为它们不是一回事。

【讨论】:

这篇文章不是关于如何使用 API 进行身份验证的。当您使用在 MVC 应用程序旁边使用 cookie 身份验证的 API 时,无论是对还是错,这是让 Postman 工作的步骤。回覆。 “cookie 交换...不适用于 API”,按照步骤操作即可。

以上是关于如何使用 Postman 使用 cookie 身份验证测试 ASP.NET Core Web API?的主要内容,如果未能解决你的问题,请参考以下文章

postman接口测试:添加cookie以及身份验证

重定向页面时如何将jwt存储在cookie中并将其传递给身份验证功能?

Postman中如何存储和重复使用cookies?

postman之cookie和token操作

postman使用教程18-如何取出返回 cookie 中的 sessionId 值

Asp.Net Core 2.2 - 如何在使用两个 AuthorizationSchemes、JWT 和 cookie 时返回当前用户 ID