如何生成token,是使用token

这段代码展示了如何使用JWT(JSON Web Token)生成安全令牌,并从令牌中解析用户信息。它创建了一个包含用户ID、用户名、角色等信息的声明,并设置令牌的过期时间。此外,还提供了一个方法将令牌中的声明转换为用户登录信息。
摘要由CSDN通过智能技术生成

如何生成token

private Token GetJwt(User user)
        {
            var now = DateTime.UtcNow;

            var claims = new Claim[]
            {
                new Claim(MyClaimTypes.UserId,user.ID.ToString(),ClaimValueTypes.Integer32),
                new Claim(MyClaimTypes.UserName,user.UserName),
                //new Claim(MyClaimTypes.RoleId,user.RoleID.ToString(),ClaimValueTypes.Integer32),
                new Claim(MyClaimTypes.RoleCode,user.RoleCode),
                new Claim(MyClaimTypes.DepartmentId,user.DepartmentID.ToString(),ClaimValueTypes.Integer32),
                new Claim(MyClaimTypes.DepartmentName,user.DepartmentName??""),
                //new Claim(JwtRegisteredClaimNames.Sub, user.UserName),
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                new Claim(JwtRegisteredClaimNames.Iat, now.ToUniversalTime().ToString(),
                          ClaimValueTypes.Integer64)
            };
            var jwt = new JwtSecurityToken(
                issuer: _options.Issuer,
                audience: _options.Audience,
                claims: claims,
                notBefore: now,
                expires: now.Add(_options.Expiration),
                signingCredentials: _options.SigningCredentials);
            var encodedJwt = new JwtSecurityTokenHandler()
                .WriteToken(jwt);
            return new Token
            {
                access_token = encodedJwt,
                expires_in = (int)_options.Expiration.TotalSeconds,
                token_type = "Bearer"
            };
        }
//获取token中的参数
public static UserInfoLogin ConvertToUserInfo(ClaimsPrincipal claimsPrincipal)
        {
            int.TryParse(claimsPrincipal.Claims.FirstOrDefault(m => m.Type == ClaimKeys.ID)?.Value, out int id);
            string roles = claimsPrincipal.Claims.FirstOrDefault(m => m.Type == ClaimKeys.Roles)?.Value;
            string loginName = claimsPrincipal.Claims.FirstOrDefault(m => m.Type == ClaimKeys.LoginName)?.Value;
            string passWord = claimsPrincipal.Claims.FirstOrDefault(m => m.Type == ClaimKeys.PassWord)?.Value;
            string userName = claimsPrincipal.Claims.FirstOrDefault(m => m.Type == ClaimKeys.UserName)?.Value;
            string telephone = claimsPrincipal.Claims.FirstOrDefault(m => m.Type == ClaimKeys.Telephone)?.Value;
            int.TryParse(claimsPrincipal.Claims.FirstOrDefault(m => m.Type == ClaimKeys.UserType)?.Value, out int userType);
            int.TryParse(claimsPrincipal.Claims.FirstOrDefault(m => m.Type == ClaimKeys.AdminAddressType)?.Value, out int adminAddressType);
            int.TryParse(claimsPrincipal.Claims.FirstOrDefault(m => m.Type == ClaimKeys.Strength)?.Value, out int strength);
            string Model = claimsPrincipal.Claims.FirstOrDefault(m => m.Type == ClaimKeys.Module)?.Value;
            string socialNum = claimsPrincipal.Claims.FirstOrDefault(m => m.Type == ClaimKeys.SocialNum)?.Value;
            int.TryParse(claimsPrincipal.Claims.FirstOrDefault(m => m.Type == ClaimKeys.AddressType)?.Value,out int addressType);
            return new UserInfoLogin
            {
                ID = id,
                Roles = roles,
                LoginName = loginName,
                UserName = userName,
                Telephone = telephone,
                UserType = userType,
                AdminAddressType = adminAddressType,
                Strength = strength,
                Module = Model,
                SocialNum= socialNum,
                AddressType= addressType,
                PassWord = passWord,
            };
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值