簡體   English   中英

在 api logging 中獲取 bearer access token

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM