You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# Web API后端如何用Google Access Token调用API获取用户信息

在C# Web API后端调用Google用户信息接口的实现方案

下面提供两种可行的实现方式,从简单直接到规范可靠,你可以根据需求选择:


方式一:使用HttpClient直接调用(轻量快捷)

这种方式模拟前端请求逻辑,直接通过HttpClient调用Google的用户信息接口:

实现步骤

  1. 确保项目中已注入HttpClient(ASP.NET Core默认支持依赖注入)
  2. 编写API接口,接收并验证Access Token,构造请求获取用户信息

代码示例

using Microsoft.AspNetCore.Mvc;
using System.Net.Http;
using System.Threading.Tasks;
using System;

[ApiController]
[Route("api/google")]
public class GoogleAuthController : ControllerBase
{
    private readonly HttpClient _httpClient;

    public GoogleAuthController(HttpClient httpClient)
    {
        _httpClient = httpClient;
    }

    [HttpGet("userinfo")]
    public async Task<IActionResult> GetUserInfo()
    {
        // 从请求头获取Access Token(推荐用这种方式,比URL参数更安全)
        var authHeader = Request.Headers["Authorization"].ToString();
        if (!authHeader.StartsWith("Bearer "))
        {
            return BadRequest("无效的授权头格式");
        }
        var accessToken = authHeader.Substring("Bearer ".Length);

        if (string.IsNullOrEmpty(accessToken))
        {
            return BadRequest("Access Token不能为空");
        }

        // 安全构造请求URL(避免编码问题)
        var uriBuilder = new UriBuilder("https://www.googleapis.com/oauth2/v1/userinfo");
        var queryParams = System.Web.HttpUtility.ParseQueryString(uriBuilder.Query);
        queryParams["alt"] = "json";
        queryParams["access_token"] = accessToken;
        uriBuilder.Query = queryParams.ToString();

        var response = await _httpClient.GetAsync(uriBuilder.Uri);

        if (!response.IsSuccessStatusCode)
        {
            return StatusCode((int)response.StatusCode, "获取用户信息失败");
        }

        var userInfo = await response.Content.ReadAsStringAsync();
        return Ok(userInfo);
    }
}

注意事项

  • 优先通过Authorization请求头传递token,避免URL参数泄露风险
  • 需处理token过期、无效等异常情况(比如返回401时提示前端重新授权)

方式二:使用Google官方SDK(规范可靠)

Google提供了官方的.NET SDK,能自动处理token验证、请求签名等逻辑,适合生产环境使用:

实现步骤

  1. 安装NuGet包:
    Install-Package Google.Apis.Auth
    Install-Package Google.Apis.Oauth2.v2
    
  2. 编写API接口,通过SDK调用用户信息接口

代码示例

using Google.Apis.Oauth2.v2;
using Google.Apis.Services;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;

[ApiController]
[Route("api/google")]
public class GoogleAuthController : ControllerBase
{
    [HttpGet("userinfo-official")]
    public async Task<IActionResult> GetUserInfoWithOfficialSdk()
    {
        // 从请求头获取Access Token
        var authHeader = Request.Headers["Authorization"].ToString();
        if (!authHeader.StartsWith("Bearer "))
        {
            return BadRequest("无效的授权头格式");
        }
        var accessToken = authHeader.Substring("Bearer ".Length);

        if (string.IsNullOrEmpty(accessToken))
        {
            return BadRequest("Access Token不能为空");
        }

        // 初始化Google OAuth2服务
        var credential = Google.Apis.Auth.OAuth2.GoogleCredential.FromAccessToken(accessToken);
        var oauth2Service = new Oauth2Service(new BaseClientService.Initializer
        {
            HttpClientInitializer = credential,
            ApplicationName = "你的应用名称" // 填写你的应用名称
        });

        // 调用用户信息接口
        var userInfo = await oauth2Service.Userinfo.Get().ExecuteAsync();

        // 返回结构化的用户信息
        return Ok(new
        {
            UserId = userInfo.Id,
            Email = userInfo.Email,
            FullName = userInfo.Name,
            AvatarUrl = userInfo.Picture
        });
    }
}

注意事项

  • 官方SDK会自动处理请求的合法性验证,比直接调用更安全
  • 如果你的授权流程获取了Refresh Token,还可以借助SDK实现token自动刷新
  • 确保在Google Cloud Console中已启用OAuth2 API(一般默认启用,若未启用需手动开启)

内容的提问来源于stack exchange,提问作者Modestas Vacerskas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 20:01:21