所以,我有一个Java脚本和一个.NET后端。在Javascript中,我在用户登录时获取Google ID令牌,我希望将其传递给后端,并且: 1)验证令牌 2)提取电子邮件,用户名等。
这在java的文档中有解释: https://developers.google.com/identity/sign-in/web/backend-auth
主要是:
GoogleIdToken idToken = verifier.verify(idTokenString);
和
String email = payload.getEmail();
Java简单!但是在.NET中该怎么办?我找不到文档!我找到了以下线程,但它似乎是一个非常复杂的解决方案。这真的是最简单的方法吗?
干杯, 的Mattias
答案 0 :(得分:4)
您可能需要GoogleJsonWebSignature.ValidateAsync(...)
。
这提供了与您发布的Java几乎相同的行为。 唯一缺少的功能是检查令牌的受众群体字段(此省略是跟踪问题#1042)。
答案 1 :(得分:0)
我使用了Chris的领导,并提出了以下可行的方法。您必须自行设置受众群体(您应用的client_id)。如果您不提供此请求,ValidateAsync(...)
调用将不会引发错误,但是会假定您不关心它,并且如果其他一切都很好,它将成功。 Google断言这是不够的,并在问题的链接中解释了原因。
代码:
public async Task<ActionResult> TokenLogin()
{
var idToken = Request["idToken"];
var settings = new GoogleJsonWebSignature.ValidationSettings() { Audience = new List<string>() { CLIENT_ID } };
string subject = null;
try
{
var validPayload = await GoogleJsonWebSignature.ValidateAsync(idToken, settings);
subject = validPayload.Subject;
}
catch (InvalidJwtException e)
{
Response.StatusCode = 403;
Response.StatusDescription = "Your token was invalid.";
// Should probably log this.
return null;
}
// Obviously return something useful, not null.
return null;
}