使用 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

使用 Postman 登录 Angular ASP.NET CORE 应用程序

ASP.NET Web API - 请求的资源不支持 http 方法“GET”