一个用于多种服务的 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 令牌请求)