如何在没有 oAuth 身份验证的情况下连接到 Google Calendar API?

Posted

技术标签:

【中文标题】如何在没有 oAuth 身份验证的情况下连接到 Google Calendar API?【英文标题】:How do I connect to the Google Calendar API without the oAuth authentication? 【发布时间】:2012-02-18 05:00:08 【问题描述】:

我一直在研究 Google Calendar API 和有关身份验证的文档 (http://code.google.com/apis/calendar/v3/using.html#auth)。看来这里提到的用例是编写一个访问用户日历的应用程序。但是,我正在编写一个网页,该网页将访问网站所有者的日历并仅显示该日历的信息。所以,我不希望用户输入他们的谷歌账户信息,这是 oAuth 想要做的。

基本上,我正在寻找一种方法来访问单个私人 Google 日历并通过将凭据直接传递给服务对其进行身份验证。

这里有类似的问题:How to use OAuth with Google Calendar to access only ONE calendar? 这似乎表明张贴者最初是直接传递凭据。这个功能还能用吗?您如何处理我描述的用例?

【问题讨论】:

【参考方案1】:

如果我没记错的话,他们现在已经为此推出了服务帐户:https://developers.google.com/accounts/docs/OAuth2ServiceAccount

编辑:

这是他们的 Prediction API 的修改

    session_start();
    require_once "google-api-php-client/src/Google_Client.php";
    require_once "google-api-php-client/src/contrib/Google_CalendarService.php";

    const CLIENT_ID = '...';
    const SERVICE_ACCOUNT_NAME = '...';

    // Make sure you keep your key.p12 file in a secure location, and isn't
    // readable by others.
    const KEY_FILE = '...';

    $client = new Google_Client();
    $client->setApplicationName("...");


    if (isset($_SESSION['token'])) 
     $client->setAccessToken($_SESSION['token']);
    

    // Load the key in PKCS 12 format (you need to download this from the
    // Google API Console when the service account was created.
    $key = file_get_contents(KEY_FILE);
    $client->setAssertionCredentials(new Google_AssertionCredentials(
        SERVICE_ACCOUNT_NAME,
        array('https://www.googleapis.com/auth/calendar', "https://www.googleapis.com/auth/calendar.readonly"),
        $key)
    );

    $client->setClientId(CLIENT_ID);
    $service = new Google_CalendarService($client);

    //Save token in session
    if ($client->getAccessToken()) 
      $_SESSION['token'] = $client->getAccessToken();
    

    //And now you can use the code in their PHP examples, like: $service->events->listEvents(...)

【讨论】:

是的。我从他们的 Prediction API 修改了服务代码,它适用于日历 @gX。请问你能分享你的代码吗?我正在尝试做同样的事情但没有成功:(【参考方案2】:

我也有同样的问题。我发现这个由 3 部分组成的教程正是你想要的。 Web page for bookings 您创建的网页直接写入您自己的日历(而不是用户),这就是用户不必授予您访问其日历的权限的原因。 此解决方案适用于我,但您必须直接使用 REST 进行管理。 我正在寻找一种使用 google api php 客户端的方法,因为它看起来有点简单。但是我还没有找到一种方法来正确编辑 google-api-php-client/src/config.php 文件,以便以一种您验证自己而不是实际用户的方式工作,因为您需要访问您的日历。如果有人有想法或脚本可以做到这一点,我将非常感激。

【讨论】:

您指向的 3 部分文章似乎确实是答案。我将一有机会就尝试一下,如果可行,请将其标记为答案。我本来打算使用 REST API 并只处理 JSON 数据,所以这应该让我继续前进。谢谢! 这成功了!关键是将应用程序视为“已安装的应用程序”。在临时装配某些东西以获取刷新令牌后,您可以随后使用刷新令牌获取新的访问令牌,而无需提示用户。【参考方案3】:

也看看这里:

https://github.com/googleapis/google-api-php-client#authentication-with-service-accounts

创建服务帐户后,您可以在没有用户提示的情况下进行身份验证,以将项目添加到您的服务拥有的日历中。

【讨论】:

以上是关于如何在没有 oAuth 身份验证的情况下连接到 Google Calendar API?的主要内容,如果未能解决你的问题,请参考以下文章

C#:如何在启用 SSL 的情况下连接到 Active Directory?

如何在没有认证问题的情况下连接到 URL?

如何在没有 SSL 的情况下连接到 MySQL 数据库

如何在不存储凭据的情况下连接到KeyVault?

如何在没有手动浏览器身份验证的情况下从 Meteor.js 应用程序对 GMail-api 进行 oauth (2) 身份验证?

在没有公共 API 的情况下连接到网站 webosocket