c# - 通过 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;
}
解决方案
推荐阅读
- python - 如何在 Django REST Framework API 视图中显示子表
- express - 为什么我的 apollo-server-express 实例由于解析器而挂起?
- java - 我的 java swing 项目的类图表示
- azure-data-explorer - 访问范围的元数据(数据分片)
- node.js - 运行“npm run watch”时找不到模块“node-sass”中的错误?
- python - 如何使用“text_dataset_from_directory”从 tf.dataset 对象进行二进制文本分类?
- c# - 单击值时显示表的数据 - SelectionChanged
- python-3.x - 如何获取谷歌电子表格的文档名称?
- spring-boot - 为什么使用 Gradle 和 Sonarqube 在根项目中找不到 Task .login?
- javascript - 当值为 0 且值为最大值时按钮背景发生变化(jQuery)