[英]Validating Google ID tokens in C#
根据这个 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.