使用 Postman 进行 ASP.NET Web API 授权
Posted
技术标签:
【中文标题】使用 Postman 进行 ASP.NET Web API 授权【英文标题】:ASP.NET Web API Authorization with Postman 【发布时间】:2016-12-29 02:31:31 【问题描述】:我创建了一个 ASP.NET Web API 并将 Authorize 属性应用于 API 控制器。现在,我想使用 Postman 对其进行测试,但出现授权错误。
控制器代码是:
[Authorize]
[HttpPost]
public IHttpActionResult Attend([FromBody] int gigId)
var attendance = new Attdendance
GigId = gigId,
AttendeeId = User.Identity.GetUserId()
;
_context.Attdendances.Add(attendance);
_context.SaveChanges();
return Ok();
我的请求看起来像这样http://prntscr.com/c8wz0b
我正在使用这个高级邮递员休息客户端http://prntscr.com/c8xafd
如何在 Postman 中通过授权?
【问题讨论】:
【参考方案1】:编辑 23/08/2016 我假设您正在使用身份进行 cookie 身份验证
// Enable the application to use a cookie to store information for the signed in user
// and to use a cookie to temporarily store information about a user logging in with a third party login provider
// Configure the sign in cookie
app.UseCookieAuthentication(new CookieAuthenticationOptions
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
// Enables the application to validate the security stamp when the user logs in.
// This is a security feature which is used when you change a password or add an external login to your account.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
);
这是 Visual Studio 中具有标识的默认配置。 我可以争辩为什么它不是安全的好选择,但这不是重点。
你可以在“邮递员”中使用它,但这很棘手 我就是这样做的:
-
通过您的登录页面发出请求:
-
获取表单中的防伪令牌:
-
在登录页面上使用此帖子参数以数据形式发出帖子请求:
现在您的邮递员获得了身份验证 cookie,您可以使用 [authorize] 标签请求 web api
编辑
对于工具,您必须添加授权标头。
进入标题表单 添加HTTP头“授权” 点击编辑按钮等瞧;)screen shot
上一个答案已删除
【讨论】:
这是用于基本身份验证,具体取决于您的身份验证机制 我正在使用身份。我使用了上述方法,但仍然得到像这样的身份验证错误prntscr.com/c908zb 我添加了一种方法来进行 cookie 身份验证。每次您的身份验证会话关闭时,您都必须这样做。如果您必须通过电话应用程序使用 Web api,我建议您切换到基于令牌的身份验证。在手机应用程序上维护 cookie 是一团糟;) 非常感谢您提供如此详细的答案。有效。你摇滚! 谢谢!有人帮助了我,所以现在我尽我所能支付我的欠款:)【参考方案2】:除了 Mathieu 发布的答案之外,我还必须为邮递员(https://www.getpostman.com/docs/interceptor_cookies、https://www.getpostman.com/docs/capture)安装拦截器扩展来捕获 cookie。之后就成功了。
【讨论】:
【参考方案3】:对于 Postman Windows 应用 4.6.0:
-
从您的请求集合中选择您的请求
转到“授权”标签
选择适当的“类型”,例如“基本身份验证”
输入“用户名”和“密码”
点击“更新请求”
【讨论】:
对不起,我正在使用其他邮递员 (chrome.google.com/webstore/detail/advanced-rest-client/…) 甚至在设置中也没有。 prntscr.com/c8xorb我使用的是高级邮递员休息客户端而不是邮递员 Windows App 4.6.0 对不起,我对高级 REST 客户端不熟悉。但看起来您可以设置自定义标题。也许您可以手动设置“授权”标题。还可以查看How to send a correct authorization header for basic authentication,它建议在 URL 中包含用户名和密码。以上是关于使用 Postman 进行 ASP.NET Web API 授权的主要内容,如果未能解决你的问题,请参考以下文章
Postman 收到简单的 ASP.NET Core Web API 的 404 错误
[ASP.NET Core Web应用上使用个人用户帐户存储在应用程序中的Postman模拟登录时出现400错误请求错误
即使在使用 ASP.NET CORE Web Api 启用 CORS 后,仍然可以通过 POSTMAN 访问 API [重复]
Angular MSAL AD 401 在 Angular 应用程序中未经授权,但在 Postman 中 200 正常 - ASP.NET Core Web API