Лучший способ хранения токена jwt в классе http-клиента

#c# #asp.net #jwt #asp.net-web-api2

#c# #asp.net #jwt #asp.net-web-api2

Вопрос:

Итак, у меня есть две мои функции, и они работают, и это здорово, но как лучше всего хранить токен

 public async Task<string> GenerateBarrerToken()
{
        var json = JsonConvert.SerializeObject(User);
        string token = string.Empty;
        var httpContent = new StringContent(json, Encoding.UTF8, "application/json");
        // Do the actual request and await the response
        var httpResponse = await _client.PostAsync(Constants.ApiUrl   Constants.Authenticate, httpContent);
        if (httpResponse.StatusCode == System.Net.HttpStatusCode.OK)
        {
            var jsonContent = await httpResponse.Content.ReadAsStringAsync();
            var tok = JsonConvert.DeserializeObject<AuthenicationResponseOjbect>(jsonContent);
            token = tok.JwtToken;
        }
        return token;
}
  

Я obv хочу проверить, действителен ли токен здесь, но мне нужно было бы сделать это с зашифрованным токеном или чем-то еще, чтобы убедиться, что он не подделан.

Что я должен проверить в своем методе get stock, чтобы у меня был действительный токен barrer? Достаточно ли вызова AddAuthenicationHeader для метода get stock data, чтобы обеспечить его безопасность?

 public async void AddAuthenicationHeader()
{
         string bearerToken = await GenerateBarrerToken();
        _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken);
}

public async Task<List<StockItem>> GetStockData(string BomCode, string deviceId)
{
        List<StockItem> _result = new List<StockItem>();
        var uri = new Uri(string.Format(Constants.ApiUrl   Constants.GetAllSockEndPoint, string.Empty));

        var response = await _client.GetAsync(uri);
        if (response.IsSuccessStatusCode)
        {
            var byteArray = await response.Content.ReadAsByteArrayAsync();

            var content = Encoding.UTF8.GetString(byteArray, 0, byteArray.Length);
            _result = JsonConvert.DeserializeObject<List<StockItem>>(content);
        }

        return _result.ToList();
}
  

Комментарии:

1. Как кто-то должен подделать ваш токен? Он подписан, и только тот орган, который предоставил вам токен, должен иметь закрытый ключ.

Ответ №1:

Вы должны проверить его в конечной точке GetAllStock api, используя атрибут [Authorize] . Это будет что-то вроде этого

 [HttpGet]
[Authorize]
public async Task<IActionResult> GetAll(){
    ....
}