c# - 如何生成 24 小时后过期的唯一 token ?

标签 c# asp.net wcf authentication token

我有一个 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/

相关文章:

c# - WCF新手问题: Calling Methods from JavaScript

c# - Jmeter非HTTP响应代码: org. apache.http.conn.HttpHostConnectException

php - 将 Meteor 与另一种编程语言结合使用

c# - 如何在 asp.net 应用程序中注销按钮 Windows 身份验证

c# - Razor 语法 - 在字符串中使用两个变量

WCF 错误 - 找不到与方案匹配的基地址

c# - 不允许发布方法

C# MongoDB Upsert - 'BsonValue(Guid) is obsolete: ' 使用 BsonBinaryData 构造函数并指定 Guid 表示形式'

c# - 具有多个托管模块的程序集

c# - 使用linq to xml用单引号保存xml元素的属性值