Security 在restful web api中验证后续请求的令牌签名
当用户通过身份验证时,我在响应授权头中放入一个签名令牌 仅允许使用有效的签名令牌对ressource url进行进一步访问 当我创建令牌并验证它时: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
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如何使用字典存储您的令牌,然后从那里进行验证。