Можно ли сгенерировать JWT напрямую из учетной записи asp.net? - PullRequest
0 голосов
/ 05 марта 2019

Мое приложение защищает пользователей через удостоверение 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 напрямую из действия контроллера?Если да, то как?

...