【问题标题】:Google Calendar API Production Launching questionsGoogle Calendar API Production 启动问题
【发布时间】:2022-01-31 15:44:37
【问题描述】:

我正在使用 FreshDesk 构建一个可以连接到 Google 日历的聊天机器人,所以我

  1. 转到 Google Console API 并创建一个项目
  2. 将 google 日历 API 服务添加到项目中
  3. 获取凭据(OAuth 客户端 ID)
  4. 配置 OAuth 同意屏幕,添加敏感范围(编辑、查看、删除)
  5. 开发我自己的程序,该程序将提供 API 以使用谷歌日历 API 预订房间。

这里仍然很好,在我的本地计算机上一切正常。直到我尝试部署到 AWS 上的服务器。

我遇到的问题:

根据 Google 日历 API 文档中的示例代码 (https://developers.google.com/calendar/api/quickstart/dotnet)

当我在本地计算机上通过 Postman 首次触发 API 时,Chrome 会自动弹出并显示同意屏幕和文件 "Google.Apis.Auth.OAuth2.Responses.TokenResponse-user" 会在我点击屏幕中的确认后生成。

但在我部署到 AWS 服务器后,同意屏幕没有弹出。我需要将本地计算机中的 Google.Apis.Auth.OAuth2.Responses.TokenResponse-user 复制到 AWS 服务器。这是一个正确的方法吗?该文件会以某种方式消失。然后,如果没有此身份验证文件,我的所有 API 都会被破坏。将我的程序部署到生产环境的最佳方法是什么?

【问题讨论】:

  • 你想要这个单用户吗?还是您希望用户能够登录到他们的帐户?请编辑您的问题并包含您的代码。我怀疑你使用了错误的流程
  • 感谢您的回复,我只希望我的 API 可以访问 google 日历,所以我认为它是单个用户?我的聊天机器人将调用我的 API 来添加/编辑/删除谷歌日历。

标签: c# google-api google-oauth google-calendar-api google-api-dotnet-client


【解决方案1】:

您将在这里遇到一些问题。首先 GoogleWebAuthorizationBroker.AuthorizeAsync 是为已安装的应用程序设计的。它会在其运行的机器上打开同意屏幕。因此,如果它在 AWS 上运行,那么它会尝试在 AWS 上打开同意屏幕,这意味着您的用户看不到同意屏幕。解决此问题的方法是运行您的代码一次,然后 FileDatastore 会将您的凭据存储在您机器上的 Google.Apis.Auth.OAuth2.Responses.TokenResponse-user 文件中。

 credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                GoogleClientSecrets.Load(stream).Secrets,
                Scopes,
                "user",
                CancellationToken.None,
                new FileDataStore(credPath, true)).Result;

然后,您的代码将从 Google.Apis.Auth.OAuth2.Responses.TokenResponse-user 读取并在需要时加载刷新令牌。

您将遇到的问题是,如果刷新令牌过期,您的代码将无法请求您再次授权。刷新 toekns 可能会过期,但在应用程序在 Google 云控制台中设置为生产后很少见。

服务帐号

如果您使用服务帐户,您可能需要考虑使用服务帐户,您将需要一个 google 工作区帐户来设置域范围的委派,并且该服务帐户将只能访问工作区域上的日历。

关于服务帐户的好处是它们通过域范围的委派进行了预授权,这意味着您无需处理刷新令牌、验证应用程序或同意屏幕。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    相关资源
    最近更新 更多