一个用于多种服务的 JWT 令牌

Posted

技术标签:

【中文标题】一个用于多种服务的 JWT 令牌【英文标题】:One JWT token for many services 【发布时间】:2018-09-09 04:48:36 【问题描述】:

我在 ASP.Net Core 中遇到 JWT 身份验证问题。场景如下:

我有一个 ASP.NET Core Web API,我们称之为“API A”。为提供正确登录名/密码的用户生成 JWT 令牌是合理的,然后令牌正在生成。 我有第二个 ASP.NET Core Web Api,称为“API B”,它从数据库返回一些数据。我希望能够使用由“API A”生成的 JWT 令牌来授权访问来自“API B”的数据。

是否可以通过使用JwtBarear Authentication来实现?

感谢您的任何提示!

【问题讨论】:

【参考方案1】:

是的,您可以为多个服务的身份验证生成 JWT 令牌,您需要将此令牌保存在具有身份验证详细信息(user_id、设备、auth_token 等)的数据库中 -> 表中,获取并重用相同的令牌以对用户进行身份验证,直到该令牌未过期。

如果过期,重新生成并更新表中的令牌。

【讨论】:

【参考方案2】:

是否可以通过使用JwtBarear Authentication来实现?

这甚至是 JWT 令牌的预期用途。您可以使用令牌向信任身份提供者 A 的任何服务(B、C、D)进行身份验证。

假设 JWT 令牌包含确保身份和有效性的所有必要信息,即使不将令牌存储在任何数据库中,每个服务都必须验证 JWT 令牌(过期、签名等)。

【讨论】:

【参考方案3】:

您的问题的标题提到了许多服务,但在您的问题中您只谈到了两个。

请注意,JWT 令牌通常有一个受众声明 (aud),它指明了为哪些服务颁发令牌。当您验证令牌时,请确保 aud 声明包含您的服务的标识符。

【讨论】:

是的,我只提到了大约 2 个服务,但我想如果我能管理两个,我也能管理三个甚至更多。最后我解决了我的问题,解决方案是正确的设置受众和发行者属性。感谢每一位回复者!

以上是关于一个用于多种服务的 JWT 令牌的主要内容,如果未能解决你的问题,请参考以下文章

用于服务应用程序的 Google oAuth 2.0(JWT 令牌请求)

验证微服务架构的每个服务中的访问令牌(JWT)

在 Spring 上从资源服务器验证 JWT 令牌

不同的服务器使用相同的参数生成不同的 JWT 令牌

是否可以在 Php 中加密 JWT 令牌并在 Javascript 中解密?

用于 JWT 刷新令牌的 react-native 中的 httpOnly cookie