使用System.Web.Http.ApiController + Postman进行身份验证-未达到断点/不确定如何工作

时间:2018-11-21 10:06:01

标签: c# asp.net authentication asp.net-apicontroller

我遵循this tutorial来在API中实现身份验证,而邮递员则在对其进行测试。

我在使其工作方面遇到了困难,部分原因是我不确定我是否理解它应该如何工作。

如果删除[Authorize]标记,则Get()方法将运行,我将输入断点并收到期望的答复。 但是,如果有[Authorize],邮递员会用

答复。
  

{“消息”:“此请求的授权已被拒绝。”}

这也是我所期望的,但是我没有遇到任何断点,所以我无法弄清楚这种身份验证逻辑发生的位置

我将身份验证逻辑放在哪里,这意味着我将在哪里查询数据库以查看用户名/密码是否与记录匹配。

这是我正在使用的代码

 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
      ...
    }

1 个答案:

答案 0 :(得分:0)

感谢Elyas Esna提供了this example

我做了以下更改

已在同一文件中添加

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()