我有一个 WCF Web 服务,它检查用户是否有效。
如果用户有效,我想生成一个 24 小时后过期的 token 。
public bool authenticateUserManual(string userName, string password,string language,string token)
{
if (Membership.ValidateUser(userName,password))
{
//////////
string token = ????
//////////
return true;
}
else
{
return false;
}
}
最佳答案
有两种可能的方法;您可以创建一个唯一值并将创建时间与创建时间一起存储在某个地方,例如在数据库中,或者您将创建时间放入 token 中,以便稍后对其进行解码并查看它的创建时间。
创建一个唯一的 token :
string token = Convert.ToBase64String(Guid.NewGuid().ToByteArray());
创建包含时间戳的唯一 token 的基本示例:
byte[] time = BitConverter.GetBytes(DateTime.UtcNow.ToBinary());
byte[] key = Guid.NewGuid().ToByteArray();
string token = Convert.ToBase64String(time.Concat(key).ToArray());
解码 token 以获取创建时间:
byte[] data = Convert.FromBase64String(token);
DateTime when = DateTime.FromBinary(BitConverter.ToInt64(data, 0));
if (when < DateTime.UtcNow.AddHours(-24)) {
// too old
}
注意:如果您需要带有时间戳的 token 是安全的,则需要对其进行加密。否则用户可能会弄清楚它包含什么并创建一个错误的 token 。
关于c# - 如何生成 24 小时后过期的唯一 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14643735/