使用 System.Web.Http.ApiController + Postman 进行身份验证 - 没有遇到断点/不确定这是如何工作的
Posted
技术标签:
【中文标题】使用 System.Web.Http.ApiController + Postman 进行身份验证 - 没有遇到断点/不确定这是如何工作的【英文标题】:Authentication with System.Web.Http.ApiController + Postman - Not hitting breakpoints / not sure how this works 【发布时间】:2019-04-23 21:02:38 【问题描述】:我正在关注this tutorial 在 API 中实现身份验证,并由 Postman 进行测试。
我无法让它工作,部分原因是我不确定我是否理解它应该如何工作。
如果我删除[Authorize]
标记,Get()
方法运行,我进入断点并收到我期望的回复。
但是,如果有 [Authorize]
,邮递员会回复
"Message":"此请求的授权已被拒绝。"
这也是我所期望的,但是,我没有遇到任何断点,所以我无法弄清楚这个身份验证逻辑发生在哪里
我将身份验证逻辑放在哪里,这意味着我将在哪里查询数据库以查看用户名/密码是否与记录匹配。
这是我正在使用的代码
public class X: ApiController
private void SetPrincipal(IPrincipal principal)
// breakpoint
Thread.CurrentPrincipal = principal;
if (HttpContext.Current != null)
HttpContext.Current.User = principal;
public static void Register(HttpConfiguration config)
// breakpoint
config.Filters.Add(new AuthorizeAttribute());
public HttpSessionStateBase Session;
[Authorize]
public string Get()
// breakpoint
...
【问题讨论】:
authorize
默认情况下表示用户应该经过身份验证,这意味着如果您不提供用户凭据,则根本无法访问该方法
我确实通过邮递员的身份验证选项卡提供了用户名/密码,是否还缺少另一个步骤?
看看这个:docs.microsoft.com/en-us/aspnet/web-api/overview/security/…
【参考方案1】:
感谢提供this example的Elyas Esna
我做了以下更改
在同一个文件中添加了这个
public class CustomAuthorization : AuthorizeAttribute
public override void OnAuthorization(HttpActionContext actionContext)
AuthenticationHeaderValue authenticationHeaderValue = actionContext.Request.Headers.Authorization;
var userNamePasswordString = Encoding.UTF8.GetString(Convert.FromBase64String(authenticationHeaderValue.Parameter));
更改了Register()
方法
public static void Register(HttpConfiguration config)
config.Filters.Add(new CustomAuthorization());
以及Get()
的属性
[CustomAuthorization]
public string Get()
【讨论】:
以上是关于使用 System.Web.Http.ApiController + Postman 进行身份验证 - 没有遇到断点/不确定这是如何工作的的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)