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

ASP.NET Core下Google Calendar授权实现示例咨询

ASP.NET Core下Google Calendar授权实现示例咨询

嗨,我完全懂你的困惑!你提到的那篇官方文档确实重点是把Google登录集成到你的ASP.NET Core应用里,让用户用Google账号登录系统,但这和你要的仅授权访问Google Calendar数据不是一回事。下面给你梳理具体的实现思路和示例,帮你搞定Calendar集成:

首先,你需要用到Google官方的.NET客户端库,先在项目里安装这两个NuGet包:Google.Apis.Calendar.v3 和 Google.Apis.Auth.AspNetCore3,它们能帮你处理授权逻辑和Calendar API的调用。

接下来分步骤操作:

1. 配置Google Cloud平台凭据

  • 先去Google Cloud控制台创建一个项目,找到并启用「Google Calendar API」
  • 然后创建「OAuth 2.0 客户端ID」,应用类型选「Web应用」,配置好授权回调地址(比如你的Core应用里的/signin-google,这是库默认的回调路径,也可以自定义)
  • 下载生成的credentials.json文件,放到项目根目录,设置「复制到输出目录」为「如果较新则复制」

2. 在ASP.NET Core中配置授权服务

在Program.cs里添加Google授权配置,注意这里我们不是用来做应用登录,而是为了获取访问Calendar的令牌:

builder.Services.AddAuthentication(options =>
{
    // 不需要设置默认认证方案,我们仅用Google OAuth获取令牌
})
.AddGoogle(options =>
{
    var credentials = GoogleClientSecrets.FromFile("credentials.json").Secrets;
    options.ClientId = credentials.ClientId;
    options.ClientSecret = credentials.ClientSecret;
    // 指定要请求的Calendar API权限,按需选择
    options.Scope.Add(CalendarService.Scope.CalendarReadonly);
    // 若需自定义回调路径可取消注释
    // options.CallbackPath = "/auth-google-callback";
});

3. 实现授权流程和Calendar数据获取

你可以创建一个控制器来处理授权请求和数据获取:

public class GoogleCalendarController : Controller
{
    private readonly IGoogleAuthProvider _authProvider;

    public GoogleCalendarController(IGoogleAuthProvider authProvider)
    {
        _authProvider = authProvider;
    }

    // 发起授权请求
    public IActionResult Authorize()
    {
        var redirectUrl = Url.Action("Callback", "GoogleCalendar");
        var properties = _authProvider.CreateAuthProperties(redirectUrl);
        return Challenge(properties, GoogleDefaults.AuthenticationScheme);
    }

    // 授权回调,获取令牌并调用Calendar API
    public async Task<IActionResult> Callback()
    {
        var authResult = await HttpContext.AuthenticateAsync(GoogleDefaults.AuthenticationScheme);
        if (!authResult.Succeeded)
        {
            return BadRequest("授权失败,请重试");
        }

        // 获取访问令牌
        var accessToken = authResult.Properties.GetTokenValue("access_token");
        
        // 创建Calendar服务实例
        var service = new CalendarService(new BaseClientService.Initializer
        {
            HttpClientInitializer = new Google.Apis.Auth.OAuth2.UserCredential(
                new GoogleAuthorizationCodeFlow(
                    new GoogleAuthorizationCodeFlow.Initializer
                    {
                        ClientSecrets = new ClientSecrets
                        {
                            ClientId = "你的客户端ID",
                            ClientSecret = "你的客户端密钥"
                        }
                    }),
                "用户标识",
                accessToken)
        });

        // 调用Calendar API获取日历列表示例
        var calendarList = await service.CalendarList.List().ExecuteAsync();
        return View(calendarList.Items);
    }
}

一些关键注意事项

  • 如果需要长期访问用户的Calendar数据,记得请求offline_access权限,这样能获取刷新令牌,在访问令牌过期时自动刷新
  • 权限范围要根据需求选择:CalendarService.Scope.Calendar是读写权限,CalendarReadonly是只读权限
  • 测试时要确保Google Cloud控制台里的授权回调地址和应用里的完全一致,否则会出现授权失败的错误

这样就能实现仅授权访问Google Calendar数据,而不是把Google登录作为应用的登录方式啦~

备注:内容来源于stack exchange,提问作者Craig

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 07:53:18