【问题标题】:Differences between AspNetUserToken and custom made JWT token in .NET Core 3.0.NET Core 3.0 中 AspNetUserToken 和自定义 JWT 令牌之间的区别
【发布时间】:2021-01-06 00:40:39
【问题描述】:

我正在开发一个小型的辅助项目 API,我想实现 JWT 身份验证。我已经使用 JWT 制作了一些 API,并且总是进行自定义实现和验证。

这一次,我想使用 Identity/Entity Framework 来加快速度并使用已经为我制作的工具。

在执行 GenerateToken 方法并浏览互联网时,我注意到很多由 IdentityFramework 创建的表都没有使用。我对AspNetUserToken 产生了兴趣。

我注意到,而不是

private object GenerateToken(IdentityUser user)
{
    var tokenHandler = new JwtSecurityTokenHandler();
    var key = Encoding.UTF8.GetBytes(ApiConfig.JwtSecretKey);

    var tokenDescriptor = new SecurityTokenDescriptor
    {
        Subject = new ClaimsIdentity(new Claim[]
        {
            new Claim(ClaimTypes.Name, user.UserName),
            new Claim(ClaimTypes.Email, user.Email),
        }),
        Expires = DateTime.UtcNow.AddSeconds(double.Parse(ApiConfig.JwtExp)), //TODO: Try parse
        SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature),
        Audience = ApiConfig.JwtAudience,
        Issuer = ApiConfig.JwtIssuer
    };
    var token = tokenHandler.CreateToken(tokenDescriptor);
        
    return tokenHandler.WriteToken(token);
}

我用来生成新的 JWT 令牌、添加声明、颁发者、受众等...也许可以替换为:

//Removes existing token
_userManager.RemoveAuthenticationTokenAsync(user, "lboard", "login"); 
//Creates a new one
var newToken = await _userManager.GenerateUserTokenAsync(user, "lboard", "login");
//Set the new token for the user 
await _userManager.SetAuthenticationTokenAsync(user, "lboard", "login", newToken);

我想知道这两种方法之间有什么区别,以及使用自定义实现是否有任何好处,或者我是否更适合使用 IdentityFramework。

【问题讨论】:

    标签: c# asp.net-core authentication jwt asp.net-core-identity


    【解决方案1】:

    GenerateUserTokenAsync 方法在内部由其他UserManager 方法使用,例如GenerateChangeEmailTokenAsync、GenerateChangePhoneNumberTokenAsync 等。 REF

    为了使用更抽象的GenerateUserTokenAsync,您必须提供一个实际生成令牌的令牌提供者。由于您没有任何用于 JWT 访问令牌的默认令牌提供程序,因此您仍然需要自己编写逻辑并注册您的自定义令牌提供程序,然后您可以使用 GenerateUserTokenAsync 方法。

    您仍然需要自己编写 JWT 逻辑,包括声明等,但会增加开销。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-22
      • 2020-04-04
      • 1970-01-01
      • 2019-01-21
      • 2021-12-10
      • 1970-01-01
      • 2019-12-03
      • 2018-07-18
      相关资源
      最近更新 更多