#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(){
....
}