Так что я довольно новичок в этом слове, поэтому извините, если я что-то упустил.
Я написал Web Api в Asp. Net .Core 2.2, который использует токен jwt для authorizazion. Мой метод проверки подлинности выглядит следующим образом:
[AllowAnonymous]
[HttpGet("auth")]
public ActionResult<SecurityToken> Auth([FromHeader] string identity)
{
// authentication successful so generate jwt token
//if (HwKeyManager.MASTER_KEY.KEY_NOT_PRESENT)
//{
// //hasLicense = HwKeyManager.product_license_get();
//}
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes(someKey);
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new Claim[]
{
new Claim(ClaimTypes.Name, identity)
}),
Expires = DateTime.Now.AddMinutes(10),
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
};
try
{
SecurityToken token = tokenHandler.CreateToken(tokenDescriptor);
string returnToken = tokenHandler.WriteToken(token);
return Ok(returnToken);
}
catch(Exception ex)
{
logger.Error("Error while creating token : " + ex.Message);
return StatusCode(500);
}
}
это работает и дает мне токен, который я успешно использовал в запросе, подобном следующему:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + "status");
request.Timeout = 15000;
request.Headers.Add("Authorization", "Bearer " + token);
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
if (response.StatusCode == HttpStatusCode.OK)
{
return true;
}
else
{
return false;
}
}
Однако для другого метода я был пытаюсь использовать класс WebClient для создания POST-запроса, но я не могу заставить работать следующий фрагмент кода (я получаю код состояния 401, Unauthorized)
WebClient wcl = new WebClient();
wcl.Headers.Add(HttpRequestHeader.ContentType, "application/json");
wcl.Headers.Add("Authorization", "Bearer" + token);
wcl.Encoding = System.Text.Encoding.UTF8;
string pippo = wcl.UploadString(url + "doSomething", "POST", Data.ToJson());
, если я переключаюсь на HttpWebResponse, однако все работает
byte[] bytes = Encoding.ASCII.GetBytes(Data.ToJson());
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + "doSomething");
request.Timeout = 15000;
request.Headers.Add("Authorization", "Bearer " + token);
request.Method = "POST";
request.ContentType = "application/json";
Stream dataStream = request.GetRequestStream();
dataStream.Write(bytes, 0, bytes.Length);
dataStream.Close();
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
if (response.StatusCode == HttpStatusCode.OK)
{
}
else
{
}
}
Может кто-нибудь объяснить мне, почему это происходит, и если есть способ решить это?