在.Net后端服务器中验证Google ID令牌

时间:2017-07-13 20:32:23

标签: google-api-dotnet-client

所以,我有一个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

2 个答案:

答案 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;
}