使用C#验证Google ID令牌

sso*_*nez 2 c# google-api

我目前正在创建一个用户可以通过他的Google帐户登录的Web应用程序.这适用于客户端,但我也想保护REST API调用.为此,我通过"授权"标题向每个请求发送"Google id令牌".现在,我想在C#中验证传递的令牌是否有效.我发现有一个.NET库可以这样做,但我没有找到任何关于如何简单验证令牌的明确文档.

有没有人有这个指针?

小智 7

另一个简化的答案(针对.net 6):

  1. 将此 nuget 包添加到您的项目中: https://www.nuget.org/packages/Google.Apis.Auth

  2. 添加using语句:

    使用 Google.Apis.Auth;

  3. 在您的控制器中创建此方法:

    [AllowAnonymous]  
     [HttpPost("verify")] 
     public async Task<ActionResult> Verify(){
    
    string token = Request.Headers["Authorization"].ToString().Remove(0,7); //remove Bearer 
    var payload = await VerifyGoogleTokenId(token);
    if (payload==null)
    {
        return BadRequest("Invalid token");
    }
    
    
        return Ok(payload);  }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 创建VerifyGoogleTokenId函数:

         public async Task<GoogleJsonWebSignature.Payload>  VerifyGoogleTokenId(string token){    
             try
             {  
                 // uncomment these lines if you want to add settings: 
                 // var validationSettings = new GoogleJsonWebSignature.ValidationSettings
                 // { 
                 //     Audience = new string[] { "yourServerClientIdFromGoogleConsole.apps.googleusercontent.com" }
                 // };
                 // Add your settings and then get the payload
                 // GoogleJsonWebSignature.Payload payload =  await GoogleJsonWebSignature.ValidateAsync(token, validationSettings);
    
                 // Or Get the payload without settings.
                 GoogleJsonWebSignature.Payload payload =  await GoogleJsonWebSignature.ValidateAsync(token);
    
                 return payload;
             }
             catch (System.Exception)
             {
                 Console.WriteLine("invalid google token");
    
             }
             return null;
         } 
    
    Run Code Online (Sandbox Code Playgroud)
  5. 通过向 yourapi.com/verify 发送发布请求来测试实施。不要忘记授权标头。

在此输入图像描述

  1. 通过投票表示感谢。


Wen*_*n W 6

我的答案与上面的答案相同,但有一些细节.

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

GoogleJsonWebSignature.Payload payload = await GoogleJsonWebSignature.ValidateAsync(Token);
...
Run Code Online (Sandbox Code Playgroud)

有效负载对象包含您需要的所有信息.