在验证密钥斗篷(OIDC)令牌而不向密钥斗篷API提出请求时,如何保证安全



关于OAuth、OIDC和Key斗篷有很多信息,但每个教程似乎都掩盖了离线验证。我发现的唯一信息是在关于RPT内省的Keycloft文档中:

否。就像Key斗篷服务器发布的常规访问令牌一样,RPT也使用JSON web令牌(JWT(规范作为默认格式。如果您想在不调用远程内省端点的情况下验证这些令牌,则可以解码RPT并在本地查询其有效性。解码令牌后,还可以使用令牌中的权限来强制执行授权决策。

如果我想用授权令牌验证用户的请求,我会向Keycapture内省(或userinfo?(API发出请求。我不完全确定,但我猜Keycloft会用Keycloft用户数据库验证JWT中编码的信息。

然而,如果我不想对每个API请求都做一个Keycapture请求,该怎么办?这可以通过限制HTTP请求的数量来提高系统性能。有人提到JWT签名验证和读取JWT中编码的范围和用户信息,但我不知道这是如何保证安全的。难道不可能只生成任何旧的JWT,对您想要的任何信息进行编码,并基本上伪造授权令牌吗?我该如何检查JWT中提到的用户是否真的存在于Key斗篷数据库中?

我想我错过了这项技术的一些关键部分。

例如,在ASP.NET Core中,接收JWT令牌的API将在启动时从令牌提供商下载公共签名密钥,默认情况下,它将每24小时刷新一次密钥。

因此,当API收到JWT令牌时,它将进行各种检查来验证令牌,包括:

  • 使用提供程序公共签名密钥验证签名
  • 验证受众声明(令牌是为我准备的吗?(
  • 验证到期日期

API不需要针对令牌提供商(密钥斗篷(查询任何内容即可让用户进入。

然而,我们有授权(允许用户做什么(,这是另一回事,这完全取决于您的要求。

JWT就是关于用户是谁;如果令牌有效,则可以信任该信息。

使用JWT-token,您的API几乎可以从令牌提供商离线工作。如果手动将公共签名密钥复制到API中,它甚至可以100%断开连接。

最新更新