Security 在restful web api中验证后续请求的令牌签名

Security 在restful web api中验证后续请求的令牌签名,security,asp.net-web-api,token,jwt,Security,Asp.net Web Api,Token,Jwt,当用户通过身份验证时,我在响应授权头中放入一个签名令牌 仅允许使用有效的签名令牌对ressource url进行进一步访问 当我创建令牌并验证它时: var principal = tokenHandler.ValidateToken(tokenString, validationParameters); 然后,当签名密钥与获得的密钥相同时,我得到主体(发出请求的用户) 用于创建令牌 我可以在身份验证后和ressource请求期间使用相同的签名密钥来验证我创建此类的令牌: public sta

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

仅允许使用有效的签名令牌对ressource url进行进一步访问

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

var principal = tokenHandler.ValidateToken(tokenString, validationParameters);
然后,当签名密钥与获得的密钥相同时,我得到主体(发出请求的用户)

用于创建令牌

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

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;
    }
}
我把这段代码放在一个静态类中,这实际上是我的全部目的,因为我希望用随机数填充字节数组只发生一次,这有什么不对吗


还有什么可以改进的吗?

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


如果要使其特定于会话。然后您需要存储在会话变量中,而不是静态字段中。

问题在于,创建令牌和验证令牌的时间不在一个请求内,因此如果不是静态的,validateToken如何使用创建令牌时使用的相同密钥?我没有在服务器端使用会话/cookie,因为我在http api中遵循REST原则。也许我必须将密钥生成放在一个接口中,并通过autoface将其与.SingleInstance(共享的singleton)一起注入?!如果生成的令牌可以共享给所有请求,那么可以将类设置为静态。我的意思是,它将是一次为所有用户/请求生成的令牌。@HelloWorld如何使用字典存储您的令牌,然后从那里进行验证。