我试图了解如何在使用 Google 登录功能时从 Google 发送到客户端的 JWT 在我的服务器上进行验证以进行身份验证。
我想使用我的服务器上的特定电子邮件对用户进行身份验证。
这是我认为的流程:
但是,我对 JWT 操纵的潜力很好奇。有人是否可以篡改 JWT 并将其发送到我的服务器,声称电子邮件“[电子邮件受保护]”而无需实际访问该电子邮件,从而获得对受保护 API 的访问权限?
如何确保声称拥有电子邮件所有权的用户确实拥有该电子邮件?
客户端库的验证方法(例如 .NET 的 Google 客户端中的 GoogleJsonWebSignature.ValidateAsync)是否处理这方面的安全性?
我已设法在我的服务器上接收 JWT,但无法理解如何信任它。
看来,谷歌的.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 令牌是一个自封闭系统,并且它可以验证自身,这在技术上可能仍然是正确的,但让我感到困惑,让我认为没有发生服务器到服务器验证。