因为我不想重新发明轮子,所以我非常肯定已经有了一个解决方案:我想生成一个过期的密码(基于不同的密码,byte[]或任何其他密码).其 idea 是,客户端生成的密码仅在服务器上的特定时间内有效.因此,只要他们的时钟不太不同,他们就可以使用交替密码进行通信.听起来很像证书,所以肯定已经有了解决方案.

推荐答案

在我看来,你正在寻找一种token%的方法.你可以判断JWT,它有到期日期,可以很容易地在服务器端验证.

下面是一个小例子:

string GenerateToken()
{
    var mySecret = "mySecretmySecretmySecret";
    var mySecurityKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(mySecret));

    var tokenHandler = new JwtSecurityTokenHandler();
    var tokenDescriptor = new SecurityTokenDescriptor
    {
        NotBefore = DateTime.UtcNow.AddSeconds(-2),
        Expires = DateTime.UtcNow.AddSeconds(2),
        SigningCredentials = new SigningCredentials(mySecurityKey, Security算法rithms.HmacSha256Signature)
    };

    var token = tokenHandler.CreateToken(tokenDescriptor);
    return tokenHandler.WriteToken(token);
}

bool ValidateCurrentToken(string token)
{
    var mySecret = "mySecretmySecretmySecret";
    var mySecurityKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(mySecret));

    var tokenHandler = new JwtSecurityTokenHandler();
    try
    {
        tokenHandler.ValidateToken(token, new TokenValidationParameters
        {
            ClockSkew = TimeSpan.Zero,
            ValidateIssuerSigningKey = true,
            ValidateIssuer = false,
            ValidateAudience = false,
            IssuerSigningKey = mySecurityKey
        }, out SecurityToken validatedToken);
    }
    catch
    {
        return false;
    }
    return true;
}

请注意这里的ClockSkew = TimeSpan.Zero.默认情况下,MS允许令牌最多不同5分钟.我们只想使用绝对令牌的到期时间.

Csharp相关问答推荐

为什么Microsoft.AspNetCore. htttp.FormFile不实现IDDisposable?

如何定义所有项目的解决方案版本?

我应该将新的httpReportMessage()包装在using声明中吗?

为什么我在PuppeteerSharp中运行StealthPlugin时会出现错误?

当Visual Studio处于升级管理模式时,无法安装Torch运行时

我可以 suppress 规则CS 9035一次吗?

为什么这个Reflection. Emit代码会导致一个DDL ViolationException?

如何循环遍历XML文档 node 以使用XSLT存储值

无法解析数据库上下文的服务

此反射有什么问题.是否发送值转换委托?

如何删除文件的基础上嵌入的时间戳嵌入文件名

C#.NET依赖项注入顺序澄清

如何在C#中实现非抛出`MinBy`?

C#使用TextFieldParser读取.csv,但无法使用";0";替换创建的列表空条目

取决于您的数据量的多个嵌套循环

如何在我的C#应用程序中设置带有reactjs前端的SignalR服务器?

将内置的OrderedEumable&Quot;类设置为内部类有什么好处?

带有列表参数的表达式树

映射器-如何映射到多个实体

C#中COM对象的实际地址