“谷歌登录”JWT 的验证如何工作

问题描述 投票:0回答:1

我试图了解如何在使用 Google 登录功能时从 Google 发送到客户端的 JWT 在我的服务器上进行验证以进行身份验证。

我想使用我的服务器上的特定电子邮件对用户进行身份验证。

这是我认为的流程:

  1. 用户点击“使用 Google 登录”。
  2. 客户端从 Google API 获取 JWT。
  3. 客户端将 JWT 转发到我的服务器。
  4. 服务器使用 Google 提供的客户端库验证令牌。
  5. 我验证电子邮件是否为“[电子邮件受保护]。”
  6. 如果是列入白名单的电子邮件,我会发出一个 cookie,授予对受保护 API 的访问权限。

但是,我对 JWT 操纵的潜力很好奇。有人是否可以篡改 JWT 并将其发送到我的服务器,声称电子邮件“[电子邮件受保护]”而无需实际访问该电子邮件,从而获得对受保护 API 的访问权限?

如何确保声称拥有电子邮件所有权的用户确实拥有该电子邮件?

客户端库的验证方法(例如 .NET 的 Google 客户端中的 GoogleJsonWebSignature.ValidateAsync)是否处理这方面的安全性?

我已设法在我的服务器上接收 JWT,但无法理解如何信任它。

authentication jwt google-signin impersonation verification
1个回答
0
投票

看来,谷歌的.net客户端的方法:GoogleJsonWebSignature.ValidateAsync最终通过服务器到服务器事务处理JWT的验证。

因此我可以相信用户在验证 JWT 后就是他们所声称的那样。

 GoogleJsonWebSignature.Payload googleUser;

 try 
 {
      googleUser = await GoogleJsonWebSignature.ValidateAsync(data.Credential);
 }
 catch (Exception ex) 
 {
      return TypedResults.Problem(statusCode: StatusCodes.Status404NotFound);
 }

 if (googleUser.Email == "[email protected]") {
      // Authenticate user
 }

当然,与任何其他形式的身份验证一样,要意识到用户的 Google 帐户可能已被黑客入侵。

我在某处读到,JWT 令牌是一个自封闭系统,并且它可以验证自身,这在技术上可能仍然是正确的,但让我感到困惑,让我认为没有发生服务器到服务器验证。

© www.soinside.com 2019 - 2024. All rights reserved.