[英]Get bearer access token in api logging
我正在使用 web api mvc 5 我正在做 api 通話記錄。 以下是一個片段
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var corrId = string.Format("{0}{1}", DateTime.Now.Ticks, Thread.CurrentThread.ManagedThreadId);
var requestInfo = string.Format("{0};{1}", request.Method, request.RequestUri);
var requestMessage = await request.Content.ReadAsByteArrayAsync();
await IncommingMessageAsync(corrId, requestInfo, requestMessage);
var response = await base.SendAsync(request, cancellationToken);
byte[] responseMessage;
if (response.IsSuccessStatusCode)
responseMessage = await response.Content.ReadAsByteArrayAsync();
else
responseMessage = Encoding.UTF8.GetBytes(response.ReasonPhrase);
await OutgoingMessageAsync(corrId, requestInfo, responseMessage);
return response;
}
我想知道的是,如果請求來自經過身份驗證的用戶,我如何才能獲得不記名令牌。 我試過 HttpContext.Current.User 但它總是 null。
提前致謝。
假設令牌作為授權密鑰進入標頭,則可以從請求的標頭中提取承載令牌:
if (Request.Headers.Contains("Authorization"))
var bearerToken = Request.Headers.GetValues("Authorization").FirstOrDefault();
使用 .NET6 這是我的方法(還假設通過 header 作為授權密鑰的令牌):
JwtSecurityToken token = null;
if (Request.Headers.Keys.Contains("Authorization"))
{
StringValues values;
if (Request.Headers.TryGetValue("Authorization", out values))
{
var jwt = values.ToString();
if (jwt.Contains("Bearer"))
{
jwt = jwt.Replace("Bearer", "").Trim();
}
var handler = new JwtSecurityTokenHandler();
token = handler.ReadJwtToken(jwt);
}
}
if (token == null)
{
return Unauthorized();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.