繁体   English   中英

在 C# 中验证 Google ID 令牌

[英]Validating Google ID tokens in C#

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

谷歌在这里有一些示例代码但它依赖于一个 JWT NuGet 包,它只是 .Net 4.5(我使用的是 C#/.Net 4.0)。 有没有人知道没有这些包就可以做到这一点的任何示例,或者自己已经实现了这一点? 包的使用使我很难弄清楚没有它我需要做什么。

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

var validPayload = await GoogleJsonWebSignature.ValidateAsync(idToken);
Assert.NotNull(validPayload);

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

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

挑战是验证 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.
}

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

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

还需要传递 ClientId,它应该从 Google API 控制台设置。 如果只传递 TokenId,GoogleJsonWebSignature 会抛出错误。 这个答案是对@edmundpie 答案的补充

var settings = new GoogleJsonWebSignature.ValidationSettings()
{
 Audience = new List<string>() { "[Placeholder for Client Id].apps.googleusercontent.com" }
};

var validPayload = await GoogleJsonWebSignature.ValidateAsync(model.ExternalTokenId, settings);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM