首页 > 解决方案 > 通过 Options 初始化类

问题描述

我有一个创建用户令牌的功能,我有一些参数将根据类型安装。主要课程是ClaimsIdentity 我创建了一个字典,它将根据键提供详细信息。但我不能使用这种方式来安装ClaimsIdentity 我拥有的优雅、智能的方式?

private string CreateUserToken(UserDTO id, EmailOrPhone emailOrPhone)
{
    Claim claims;
    var emailOrphone = new Claim("fieldName", DateTime.Now.AddHours(12).ToString("ddMMyyyy"));
    var tokenHandler = new JwtSecurityTokenHandler();
    var key = Encoding.ASCII.GetBytes("MySecret_Nofshonit");

    var dic = new Dictionary<EmailOrPhone, Claim>()
                {
                    {EmailOrPhone.Phone, new Claim("expiredDate", DateTime.Now.AddHours(12).ToString("ddMMyyyy")) },
                    {EmailOrPhone.Phone, new Claim("fieldName", "Phone")  },
                    {EmailOrPhone.Email, new Claim("expiredDate", DateTime.Now.AddHours(48).ToString("ddMMyyyy")) },
                    {EmailOrPhone.Email, new Claim("fieldName", "Email")  },
                };

    var tokenDescriptor = new SecurityTokenDescriptor
    {
        //Expires = DateTime.Now.AddMonths(3),
        Subject = new ClaimsIdentity(new Claim[]
        {

                        new Claim("memberId", id.ToString()),
                        new Claim("creationDate", DateTime.Now.ToString("ddMMyyyy")),
                        new Claim("expiredDate", DateTime.Now.AddMonths(3).ToString("ddMMyyyy")),
                        // ....
        }),
        SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
    };

    var token = tokenHandler.CreateToken(tokenDescriptor);
    var tokenString = tokenHandler.WriteToken(token);
    var encryptedTokenString = Cryptor.Encrypt(tokenString);

    return encryptedTokenString;
}

标签: c#.net-core

解决方案


推荐阅读