我有一个 WCF Web 服务来检查用户是否有效。
如果用户有效,我想生成一个 24 小时后过期的令牌。
public bool authenticateUserManual(string userName, string password,string language,string token)
{
if (Membership.ValidateUser(userName,password))
{
//////////
string token = ????
//////////
return true;
}
else
{
return false;
}
}
有两种可能的方法;您可以创建一个唯一值并将其与创建时间一起存储在某个位置(例如数据库),或者将创建时间放入令牌中,以便稍后可以对其进行解码并查看它的创建时间。
要创建唯一的令牌:
string token = Convert.ToBase64String(Guid.NewGuid().ToByteArray());
创建包含时间戳的唯一令牌的基本示例:
byte[] time = BitConverter.GetBytes(DateTime.UtcNow.ToBinary());
byte[] key = Guid.NewGuid().ToByteArray();
string token = Convert.ToBase64String(time.Concat(key).ToArray());
解码令牌以获取创建时间:
byte[] data = Convert.FromBase64String(token);
DateTime when = DateTime.FromBinary(BitConverter.ToInt64(data, 0));
if (when < DateTime.UtcNow.AddHours(-24)) {
// too old
}
注意:如果您需要带有时间戳的令牌安全,则需要对其进行加密。否则,用户可能会找出其中包含的内容并创建虚假令牌。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)