Как использовать OAuth с Календарем Google для доступа только к ОДНОМУ календарю?
Я создаю веб-приложение для клиента, и я не уверен, что делаю правильные вещи...
По сути, я создал PHP-приложение, которое читает, редактирует, удаляет календари в Google и сохраняет копию в собственной базе данных веб-приложения (по разным причинам). Теперь я прочитал об OAuth 2.0 и понял, что его можно безопаснее использовать, чем иметь общий пароль Google моего клиента (который получает доступ ко ВСЕМ службам Google (календарь, электронная почта и т. Д.)) Непосредственно в моем веб-приложении в файле PHP (в других файлах). словами, если хакер заходит на сервер, то он может украсть ее пароль...).
Итак, я создал учетную запись OAuth 2.0, добавив классы / папки с этой страницы http://code.google.com/apis/calendar/v3/using.html#setup
и добавил соответствующие сценарии на тестовой странице, чтобы "разрешить доступ к вашей информации" (see "Instantiating the client " in the same page)
...
Вот мои вопросы: если я вошел в мою почту gmail с моей информацией для входа (не моим клиентом) и перешел на свою тестовую страницу, он попросит меня санкционировать доступ к моему Календарю Google. Но я хочу календарь моего клиента, а НЕ МОЙ! Итак, давайте представим, что я вышел из системы, вошел с моей информацией о клиенте и перешел на тестовую страницу: это прекрасно, я авторизую учетную запись, затем я перенаправлен в свое приложение, где я могу увидеть календарь HER.
Но это не практично ИЛИ не логично... Так как, например, я хочу, чтобы люди на ее сайте ОБЩАЯ ПУБЛИЧНАЯ зашли на страницу и заполнили форму, чтобы автоматизировать ее встречи. Сценарий должен проверить ее календарь Google.... и спросить разрешение на свои учетные записи Gmail? Нет, я хочу ее календарь.
Так что это моя проблема / вопрос. Что я делаю неправильно? Это правильный путь или я пропустил шаг? Был ли этот API предназначен для этого?
Как я могу использовать API для работы описанным выше способом?
Спасибо всем, чтобы зажечь мою свечу
Joel
2 ответа
Если я вас правильно понимаю, у вас есть право аутентификации. Проблема в том, что вы не хотите отображать календарь вошедшего в систему пользователя; Вы хотите отобразить календарь вашего клиента.
Пользователь может писать в календарь при одном из двух обстоятельств:
- Пользователь владеет календарем или
- Владелец предоставил пользователю доступ на запись явным образом, указав адрес электронной почты пользователя.
Очевидно, что вторая ситуация не масштабируется. И в любом случае, вам нужно будет встроить учетные данные вашего клиента в ваше приложение, а затем использовать их либо для создания встреч от имени аутентифицированного пользователя, либо для обмена календарем с пользователем. Конечно, вы захотите зашифровать учетные данные вашего клиента - не просто жестко закодируйте их в своем приложении!
Вместо того, чтобы использовать "реальную" учетную запись вашего клиента, было бы более безопасно создать новую учетную запись (с уникальным адресом электронной почты и паролем) специально для этого календаря. Затем ваш клиент может получить к нему доступ через ваше приложение, как и его клиенты, или вы можете поделиться с ней календарем и предоставить ей доступ для записи.
Другая возможность может заключаться в том, чтобы сделать календарь доступным только для чтения пользователям, и вместо того, чтобы позволять им создавать встречи непосредственно в календаре вашего клиента, ваше приложение может разрешать им запрашивать встречи: оно будет создавать события в календарях пользователей и отправлять приглашения. в календарь вашего клиента. Тогда вашему приложению не понадобятся встроенные учетные данные. Это также даст вашему клиенту возможность подтверждать или отклонять каждую встречу, автоматически отправляя свой ответ своим пользователям. Еще одним преимуществом является то, что встречи каждого пользователя будут отображаться в его / ее личном календаре Google.
Мне было бы интересно узнать, если вы (или кто-либо еще) найдет лучшее решение.
У меня та же проблема, я решил использовать Zend Framework, даже если мне не нравится, как это все еще, и я пытаюсь сделать с Google API напрямую. (и я не в состоянии) Zend обернуть их, я полагаю.
Я знаю, что вопрос в любом случае очень старый, я включил класс Zend Loader и расширение календаря. Тогда я просто использую:
if($something) {
$client = getClientLoginHttpClient($usergmail, $passgmail);
createEvent($client,$dbcon,$id_event);
}
где $dbcon - это подключение к моему dv, а $id_event - это идентификатор, где я могу найти данные, которые я хочу вставить (дату, содержимое, заголовок, время и т. д.). Мне это не нравится, но это работает.