具有JWT Bearer身份验证的Web API中来自发布请求的空有效负载

时间:2018-10-25 07:26:15

标签: asp.net-web-api2 jwt bearer-token

我正在使用具有JWT承载身份验证的Asp.NET Web API,并且由于某些原因,当我不传递承载令牌时,sampleModel方法中的Sample参数显示为null。奇怪的是,当我设置不记名令牌时,它可以正常工作。 这与我设置JWT身份验证有什么关系吗,还是我在这里遗漏了其他东西?

我正在使用的代码如下:

[RoutePrefix("api/accounts/OTP")]
[AllowAnonymous]
public class OTPController : BaseApiController
{
    [Route("Sample")]
    [HttpPost]
    public async Task<IHttpActionResult> Sample(SampleModel sampleModel)
    {
        return Ok();
    }
}

我的BaseApiController类是:

public class BaseApiController : ApiController
{
    private readonly CurrentRequest _currentRequest;
    public BaseApiController(CurrentRequest currentRequest)
    {
        _currentRequest = currentRequest;
        if (_currentRequest.Value == null)
            throw new ArgumentNullException("Request", "HttpRequestMessage is null");

        if (RequestContext.Principal.Identity.IsAuthenticated)
        {
            Thread.CurrentPrincipal = RequestContext.Principal;
            HttpContext.Current.User = RequestContext.Principal;
        }
    }
}

SampleModel类为:

public class SampleModel
{
    public string code { get; set; }
}

1 个答案:

答案 0 :(得分:0)

解决了。

很显然,我正在阅读帖子正文,甚至还没有到达控制器。

当我使用OWIN身份验证时,我正在根据每个请求app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);创建OWIN上下文,在此Create方法中,我通过以下方式读取内容 OwinRequestExtensions.GetBodyParameters(context.Request).Where(b => b.Key == "tenant")?.FirstOrDefault().Value;,当用户未通过身份验证时。删除了它,现在可以正常工作。