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

使用.NET库对接Google Calendar API:如何用已有Token生成Credentials

服务器端用已有Token创建Google Calendar凭据并插入事件

你已经走完授权码流程的前两步,拿到了AccessToken和RefreshToken,不用再用桌面端的GoogleWebAuthorizationBroker,直接通过以下方式构建服务器端可用的credentials:

步骤实现

首先确保安装NuGet包:Google.Apis.Calendar.v3 和 Google.Apis.Auth

1. 把已存的Token转成TokenResponse对象

先把你数据库里存的用户Token信息映射成Google SDK的TokenResponse:

var tokenResponse = new TokenResponse
{
    AccessToken = "用户的AccessToken",
    RefreshToken = "用户的RefreshToken",
    ExpiresInSeconds = /* Token剩余过期秒数,或从过期时间计算 */,
    IssuedUtc = DateTime.UtcNow // 或者Token实际颁发的UTC时间
};

2. 创建授权流程和UserCredential

// 配置你的Google客户端密钥
var clientSecrets = new ClientSecrets
{
    ClientId = "你的Google Client ID",
    ClientSecret = "你的Google Client Secret"
};

// 授权范围要和用户授权时完全一致,比如日历事件读写
var scopes = new[] { CalendarService.Scope.CalendarEvents };

// 创建服务器端授权流程实例
var flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
{
    ClientSecrets = clientSecrets,
    Scopes = scopes,
    // 可选:如果需要持久化Token,这里可以用自定义的IDataStore实现(比如数据库)
    DataStore = new FileDataStore("CalendarTokenStore")
});

// 用TokenResponse生成UserCredential
var userId = "用户唯一标识(比如邮箱)"; // 和授权时用的用户标识一致
var credentials = new UserCredential(flow, userId, tokenResponse);

3. 处理Token过期并插入事件

// 检查Token是否过期,过期自动刷新
if (credentials.Token.IsExpired(SystemClock.Default))
{
    await credentials.RefreshTokenAsync(CancellationToken.None);
    // 刷新后记得把新的AccessToken、RefreshToken存回数据库,下次用最新的
}

// 初始化Calendar服务
var service = new CalendarService(new BaseClientService.Initializer
{
    HttpClientInitializer = credentials,
    ApplicationName = "你的Blazor应用名称"
});

// 构建要插入的事件
var newEvent = new Event()
{
    Summary = "Blazor应用同步的日程",
    Location = "线上会议",
    Start = new EventDateTime()
    {
        DateTime = DateTime.Parse("2024-06-01T14:00:00"),
        TimeZone = "Asia/Shanghai"
    },
    End = new EventDateTime()
    {
        DateTime = DateTime.Parse("2024-06-01T15:00:00"),
        TimeZone = "Asia/Shanghai"
    }
};

// 插入到用户的主日历
var request = service.Events.Insert(newEvent, "primary");
var createdEvent = await request.ExecuteAsync();

重要提醒

  • Token更新要持久化:每次刷新Token后,必须把新的Token信息更新到你的存储(数据库)里,不然下次调用会用过期的Token。
  • Scope要一致:授权流程的scopes必须和用户当初授权时的完全匹配,否则会触发权限不足的错误。
  • 敏感信息保密:ClientSecret绝对不能暴露给前端,所有Token处理和API调用都要在Blazor服务器端执行。

内容的提问来源于stack exchange,提问作者Greg Gum

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:23:13