Мое приложение защищает пользователей через удостоверение asp.net.Если пользователь входит в систему через стандартную форму входа, я могу получить JWT, сгенерированный с помощью Javascript, следующим образом:
var mgr = new Oidc.UserManager(settings);
mgr.getUser().then(function (u) {
if (u) {
console.log(u.access_token);
}
});
Теперь у нас есть требование генерировать JWT непосредственно из действия контроллера.Поэтому после небольшого прочтения я написал что-то вроде этого (это может не скомпилироваться - это грубая сводка для демонстрации):
var userToVerify = await _userManager.FindByNameAsync(userName);
if (userToVerify == null)
{
return null;
}
ClaimsIdentity identity;
if (await _userManager.CheckPasswordAsync(userToVerify, password))
{
identity = new ClaimsIdentity(new GenericIdentity(userName, "Token"), new[]
{
new Claim("MyId", id),
new Claim("MyRole", "ApiAccess")
});
}
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, userName),
identity.FindFirst("MyRole"),
identity.FindFirst("MyId")
};
var securityKey = new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(Encoding.UTF8.GetBytes("MyKey"));
var jwt = new JwtSecurityToken(
issuer: "MyDomain",
audience: "MyAudienceSite",
claims: claims,
notBefore: DateTime.Now,
expires: DateTime.Now.AddMinutes(1),
signingCredentials: new Microsoft.IdentityModel.Tokens.SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature));
var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt);
return encodedJwt;
Который кажется довольно большим количеством прыжков, чтобы пройти через что-то, что я могууже получите, войдя в систему с существующим кодом и запросив токен.
Все ли это строго необходимо, или я могу просто войти в систему и вернуть JWT напрямую из действия контроллера?Если да, то как?