C# 用C验证googleid令牌#

C# 用C验证googleid令牌#,c#,google-api,C#,Google Api,我目前正在创建一个web应用程序,用户可以通过他的Google帐户登录。这在客户端是可行的,但我也希望保护RESTAPI调用。为此,我通过“授权”头发送每个请求的“GoogleID令牌”。现在,我想在C#中验证传递的令牌是否有效。我发现有一个.NET库可以这样做,但我没有找到任何关于如何简单地验证令牌的清晰文档 有人对此有什么建议吗?我的答案与上面的答案相同,但有更多的细节 using Google.Apis.Auth; using Google.Apis.Auth.OAuth2; Googl

我目前正在创建一个web应用程序,用户可以通过他的Google帐户登录。这在客户端是可行的,但我也希望保护RESTAPI调用。为此,我通过“授权”头发送每个请求的“GoogleID令牌”。现在,我想在C#中验证传递的令牌是否有效。我发现有一个.NET库可以这样做,但我没有找到任何关于如何简单地验证令牌的清晰文档


有人对此有什么建议吗?

我的答案与上面的答案相同,但有更多的细节

using Google.Apis.Auth;
using Google.Apis.Auth.OAuth2;

GoogleJsonWebSignature.Payload payload = await GoogleJsonWebSignature.ValidateAsync(Token);
...
有效负载对象包含您需要的所有信息。

根据需要,必须检查多个内容,以便id令牌有效,而不仅仅是签名

其中之一是“ID令牌是否等于[…]您的应用程序的客户端ID”。由于我们从未将客户端ID提供给GoogleJsonWebSignature.ValidateAsync(令牌),因此我们似乎需要手动检查它。我假设它实际上只是检查签名,我们需要手动执行所有其他检查

我的第一次尝试是:

bool valid=true;
尝试
{
GoogleJsonWebSignature.Payload Payload=等待GoogleJsonWebSignature.ValidateAsync(令牌);
如果(!payload.academy.Equals(“您的客户机ID_1234567890.apps.googleusercontent.com”))
有效=错误;
如果(!payload.Issuer.Equals(“accounts.google.com”)&&&!payload.Issuer.Equals()https://accounts.google.com"))
有效=错误;
if(payload.ExpirationTimeSeconds==null)
有效=错误;
其他的
{
DateTime now=DateTime.now.ToUniversalTime();
DateTime expiration=DateTimeOffset.FromUnixTimeSeconds((长)有效载荷.ExpirationTimeSeconds).DateTime;
如果(现在>到期)
{
有效=错误;
}
}
}
捕获(无效JWTE异常)
{
有效=错误;
}

以下验证由Google.api.Auth库进行内部检查,无需额外验证(传递设置或检查有效负载):

  • 错误jwt(null、空、太长、缺少签名)
  • 错误算法
  • 无效签名
  • 无效发行人
  • 无公差签名时间
但是,以下内容需要开发人员的输入才能进行验证。它们可以通过GoogleJsonWebSignature传递。验证设置:

  • 听众
  • 托管域
  • 带容差的签名时间
资料来源:

,必须通过使用Google的公钥验证签名来验证令牌。同时检查aus、iss和exp索赔以及hd索赔(如果适用)。 因此,只有AU(和hd)必须由开发人员明确测试

试试看
{
//...
var validationSettings=new GoogleJsonWebSignature.validationSettings
{
访问者=新字符串[]{“[google-signin-client_id].apps.googleusercontent.com”}
};
var payload=wait GoogleJsonWebSignature.ValidateAsync(idToken,validationSettings);
//...
}
捕获(InvalidJwtException ex)
{
//...
}

这就是我要找的,谢谢这只是检查签名吗?有一小部分需要检查的事项: