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.
挑战是验证 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 及其过期时间。
注意您不应传递访问令牌,而应在交换一次性代码以检索访问令牌后执行此检查。