我已经遍历了一些.NET Core2服务,并向其中添加了一些JWT身份验证以提供一些基本的安全性。
我创建了一个新的ProvisioningService
,它的端点构建令牌并返回令牌:
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Jwt:Key"]));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(_config["Jwt:Issuer"],
_config["Jwt:Issuer"],
claims,
expires: DateTime.Now.AddMinutes(30),
signingCredentials: creds);
return new JwtSecurityTokenHandler().WriteToken(token);
我通过在TestService
中添加AddAuthentication
来更改了一项现有服务(我将其称为StartUp
)。此呼叫的端点具有[HttpPost(), Authorize]
属性。我将这些更改部署到了我的测试服务器。
当我致电TestService/api/updateSomething
时,我将按预期返回401 Unauthorized
。在我的本地计算机上,我通过ProvisioningService/api/buildToken
创建了一个新令牌,并通过授权标头将响应中的令牌添加到了我的TestService
调用中。令我惊讶的是...
为什么我的TestService
(在完全不同的服务器上)将在本地计算机上创建的令牌视为有效令牌,并允许该呼叫正常工作?我期望它返回相同的401
,因为我认为此令牌在测试服务器上将是无效的。我对JWT的经验不足可能表明...。但是我不了解如何在服务器之间存储/共享这些令牌。
答案 0 :(得分:0)
我无法理解令牌本身具有解密后需要授权的内容。不再需要这个问题。