繁体   English   中英

似乎无法验证对我的 ASP.NET 核心 API 的请求

[英]Can't seem to authenticate a request to my ASP.NET Core API

我有一个本地 API 我正在为我的项目运行,我一起破解了一种方法来获取当前登录用户的配置文件数据,如下所示:

[HttpGet("profile"), Authorize]
public async Task<ActionResult> GetProfile()
{
    var claim = HttpContext.User.Claims.First(o => o.Type == "id");
    var usr = _userVerification.GetUser(int.Parse(claim.Value));
    return new OkObjectResult(new GenericAPIResponse<ProfileVM>(new ProfileVM()
    {
        FirstName = usr.FirstName,
        Id = usr.UserId,
        LastName = usr.LastName,
        Role = (ProfileVM.RoleType)usr.Role
    }));
}

在 API 项目中,我配置了 JWT 身份验证,并通过Authorization header 传递令牌以“登录”。 当我通过提琴手手动执行此操作时,一切正常,但是每当我尝试从客户端应用程序调用它时,它就永远不想出于某种未知原因将 header 放入请求中。

在我的客户中,我终于接受了 RestSharp 的这种方法:

if (bearer != null)
    client.Authenticator = new JwtAuthenticator(bearer);
...
public async Task<GenericAPIResponse<ProfileVM>> GetUserProfile()
{
    var req = new RestRequest("/user/profile");
    //req.AddHeader("Authorization", $"Bearer {bearer}"); <- tried that as well but no luck
    var res = await client.ExecuteAsync(req);
    return JsonConvert.DeserializeObject<GenericAPIResponse<ProfileVM>>(res.Content);        
}

现在的问题是我总是收到 401 错误,因为 AUTHORIZATION header 永远不会包含在请求中。 我之前也厌倦了 Refit,因为我做了这样的方法声明:

Task<GenericAPIResponse<ProfileVM>> GetProfile([Header("Authorization")] string token);

没有什么。 似乎无论我做什么,我都无法在我的请求中添加授权 header,而使用改装添加任何其他X- header 就可以了。

这是上面带有 RestSharp 的代码的结果(从 Fiddler4 复制):

GET https://localhost:44355/api/user/profile HTTP/1.1
Host: localhost:44355
Accept: application/json, text/json, text/x-json, text/javascript, application/xml, text/xml
User-Agent: RestSharp/106.15.0.0
Connection: Keep-Alive
Accept-Encoding: gzip, deflate

我正式没有想法,开始在圈子里转 go。 我在这里想念什么? 请问我可以在这里获得一些新的观点吗?

RestRequest只是一个带有精美涂层的HttpRequest ,所以我总是像这样添加一个不记名令牌 header,方法是将它添加到HttpRequestMessage object 中,我将其交给HttpClient为我处理。

var request = new HttpRequestMessage(HttpMethod.Get, myFullUrl);
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);

var response = await this.httpClient.SendAsync(request, cancellationToken);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM