【问题标题】:Validate a token signature for subsequent request in a restful web api在 RESTful Web API 中验证后续请求的令牌签名
【发布时间】:2014-03-05 03:38:54
【问题描述】:

当用户通过身份验证时,我在响应授权标头中放置了一个签名令牌。

只有使用有效的签名令牌才允许对资源 URL 的每次进一步访问。

当我创建令牌并验证它时:

var principal = tokenHandler.ValidateToken(tokenString, validationParameters);

然后当签名密钥与得到的密钥相同时,我得到委托人(发出请求的用户)

用于创建令牌。

我可以在身份验证后和资源请求期间使用相同的签名密钥来验证我创建的这个类的令牌:

public static class ApiConstants
{
    private static readonly RNGCryptoServiceProvider CryptoProvider = new RNGCryptoServiceProvider(new byte[33]);
    private static byte[] key = new byte[32];

    static ApiConstants()
    {
        CryptoProvider.GetBytes(key);
    }

    public static byte[] GetSignedKey()
    {
        return key;
    }
}

我将这段代码放在一个静态类中是否有什么问题,这实际上是我的全部目的,因为我希望用随机数填充字节数组只发生一次!?

还有什么可以改进的吗?

【问题讨论】:

    标签: security asp.net-web-api token jwt


    【解决方案1】:

    您不能将签名令牌设为静态。因为那样它将成为全局变量并由所有请求(线程)共享。您还将面临静态字段的并发问题。

    如果你想让它特定于会话。那么您需要存储在会话变量中而不是静态字段中。

    【讨论】:

    • 问题是创建令牌和验证令牌的时间不在 ONE 请求中,所以 validateToken 如果不是静态的,如何使用创建令牌时使用的相同密钥?我没有在服务器端使用会话/cookie,因为我在我的 http api 中遵循 REST 原则。
    • 也许我必须将密钥生成放在一个接口中,并通过 autoface 将其注入 .SingleInstance 这是一个共享单例?!
    • 如果生成的令牌可以共享给所有请求,则可以将类设为静态。我的意思是说它将为所有用户/请求一次性生成令牌。
    • @HelloWorld 使用字典存储你的令牌然后从那里验证怎么样。
    猜你喜欢
    • 2017-03-24
    • 2014-10-08
    • 2018-01-03
    • 1970-01-01
    • 2019-01-03
    • 2016-08-19
    • 2015-06-22
    • 2011-04-25
    • 2021-07-22
    相关资源
    最近更新 更多