在C#中验证Google ID令牌

See*_*vil 12 .net c# authentication google-plus

我需要在ASP.NET web api上验证从移动设备传递的Google ID令牌.

谷歌有一些示例代码,但它依赖于JWT NuGet包,它只是.Net 4.5(我使用的是C#/ .Net 4.0).有没有人知道没有这些包装或者自己实现了这样做的任何样品?使用该软件包使得很难找到没有它我需要做的事情.

edm*_*pie 16

根据这个github 问题,您现在可以使用GoogleJsonWebSignature.ValidateAsync方法来验证Google签名的JWT.只需将idToken字符串传递给方法即可.

var validPayload = await GoogleJsonWebSignature.ValidateAsync(idToken);
Assert.NotNull(validPayload);
Run Code Online (Sandbox Code Playgroud)

如果它不是有效的,它将返回null.

请注意,要使用此方法,您需要先手动安装Google.Apis.Auth nuget.


cla*_*ass 1

挑战是验证 ID 令牌中的 JWT 证书。目前据我所知,没有一个库可以在不需要 .Net 4.5 的情况下执行此操作,并且在 .NET 4.0 中出现用于 JWT 验证的解决方案之前,不会有一个简单的解决方案。

但是,如果您有访问令牌,则可以考虑使用oauth2.tokeninfo执行验证。要使用令牌信息执行基本验证,您可以执行如下操作:

// Use Tokeninfo to validate the user and the client.
var tokeninfo_request = new Oauth2Service().Tokeninfo();
tokeninfo_request.Access_token = _authState.AccessToken;
var tokeninfo = tokeninfo_request.Fetch();
if (userid == tokeninfo.User_id
    && tokeninfo.Issued_to == CLIENT_ID)
{
    // Basic validation succeeded
}
else
{
    // The credentials did not match.
}
Run Code Online (Sandbox Code Playgroud)

从 Google OAuth2 API 返回的信息会告诉您有关特定令牌的更多信息,例如颁发的客户端 ID 及其过期时间。

注意您不应传递访问令牌,而应在交换一次性代码以检索访问令牌后执行此检查。