[英]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.