GoogleカレンダーでOAuthを使用して1つのカレンダーにのみアクセスするにはどうすればよいですか?

私は顧客のためのWebアプリケーションを構築しています。私は正しいことをやっているとは本当にわかりません...

基本的には、Googleでカレンダーを読み取り、編集、削除するPHPアプリケーションを作成し、自分のWebアプリケーションDBにコピーを保存しています(さまざまな理由で)。今、私はOAuth 2.0について読んで、クライアントの一般的なGoogleのパスワード(すべてのGoogleサービス(カレンダー、電子メールなど)にアクセスする)をWebアプリケーションのPHPファイルに直接格納するよりも安全ですハッカーがサーバーに侵入した場合、パスワードを盗むことができます...)。

OAuth 2.0アカウントを作成し、このページの http://code.google.com/apis/calendar/v3/using.html#setup からクラス/フォルダを追加し、適切なスクリプトを追加しました「あなたの情報へのアクセスを許可する」(同じページの「クライアントをインスタンス化する」を参照)のテストページ ...

ここに私の質問があります:自分のログイン情報(私のクライアントではない)で私のGmailにログインし、私のテストページに行くと、私はGoogleカレンダーへのアクセスを許可するようMEに頼みます。しかし、私は私のクライアントのカレンダーを必要とします。だから私はログアウトし、顧客情報でログインしてテストページに行きましょう。完璧です。アカウントを承認してから、私は自分のアプリにリダイレクトされ、そこで私は彼女のカレンダーを見ることができます。

しかし、これは実用的でない論理的なものではありません。例えば、私は彼女の一般公衆サイトの人々がページに行き、彼女の予定を自動化するためにフォームを記入したいからです。スクリプトは自分のGoogleカレンダーをチェックして、そのGmailアカウントの許可を求める必要がありますか?いいえ、私は彼女のカレンダーが欲しいです。

これは私の問題/質問です。私は間違って何をしていますか?これはそうする正しい方法ですか、私は一歩を逃しましたか?このAPIはこれを行うためのものでしたか?

上記の方法でAPIを使用するにはどうしたらよいですか?

すべて私のキャンドルを軽くするためにありがとう

ジョエル

2

2 答え

私があなたを正しく理解しているなら、あなたは認証の権利を持っています。問題は、ログインしているユーザーのカレンダーを表示したくないことです。クライアントのカレンダーを表示したいとします。

ユーザーは、次の2つの状況のいずれかでカレンダーに書き込むことができます。

  1. ユーザーがカレンダーを所有しているか
  2. 所有者は、ユーザーの電子メールアドレスを指定して、明示的にユーザーに書き込みアクセス権を与えました。

明らかに、第2の状況は拡大縮小しない。どちらの場合でも、クライアントの資格情報をアプリケーションに埋め込み、認証されたユーザーの代わりに予定を作成するか、カレンダーをユーザーと共有する必要があります。もちろん、あなたのクライアントの資格情報を暗号化したいと思うでしょう - 単にあなたのアプリでそれらをハードコードしないでください!

クライアントの「本当の」アカウントを使用するのではなく、このカレンダー専用の新しいアカウント(固有の電子メールアドレスとパスワードを使用)を作成する方が安全です。あなたのクライアントは、お客様のアプリケーションとしてアプリケーションにアクセスしたり、カレンダーを彼女と共有したり、書き込みアクセス権を与えることができます。

別の可能性は、カレンダーをユーザーに読み取り専用にすることで、クライアントの予定表に直接作成することを許可するのではなく、リクエスト :ユーザーのカレンダーにイベントを作成し、クライアントのカレンダーに招待状を送信します。それで、あなたのアプリは埋め込み資格情報を必要としません。また、クライアントに、各予定を確認または却下し、自動的にユーザーに返信する機会を与えます。もう1つの利点は、各ユーザーの予定が自分の個人用Googleカレンダーに表示されることです。

私はあなた(または他の誰か)がより良い解決策を見つけたかどうかを知ることに興味があります。

1
追加された
あなたのアプリケーションはApp Engine上にあるので、クライアントのクレデンシャルをユーザに/から送信する必要はありません。あなたのアプリはOAuthハンドシェイクを完了するためにそれらを保存し検索する必要があります。しかし、私は、ある人(ユーザ)が他の誰か(あなたのクライアント)に代わって行動を起こすことを許可するアプリのアイデアについて考えると、私はもっと不快に感じます。 2つ目のオプションは、それがあなたのために働くならば、より安全で多機能であるようです。
追加された 著者 Adam Liss,
ご回答有難うございます。 「暗号化」と言うと、どうやってそれを正確に行うのですか?それを暗号化してカレンダーにアクセスする必要がある場合は、その要求をGoogleに送信する前に解読する必要があります。したがって、ハッカーは解読スクリプトを見て、それを実行します。 http://code.google.com/apis/console-help/#UsingKeys の代わりにAPIキーを使用する必要がありますか?
追加された 著者 Joel,
OK。私は私のPHPスクリプトでAPIキーを使用する方法についての情報を見つけようとしています、そして、それはどこに隠されているのですか?私が自分のコンソールに行ったとき、彼らが言うのはこのキーを使うには、すべてのリクエストにkey = パラメータを追加するだけです。 「シンプルAPIアクセス」を使用するにはどうすればよいですか?ありがとう
追加された 著者 Joel,

私は同じ問題を抱えていますが、私はそれがまだ好きでなくても、GoogleのAPIフレームワークを使って直接動こうとしています。 (私はできません) Zendが私の周りを包み込むだろう。

私は質問がとにかく、非常に古いです知っている、私はzendローダークラスを埋め込み、カレンダーの拡張子。 それから私はちょうど使用する:

if($something) {
    $client = getClientLoginHttpClient($usergmail, $passgmail);
    createEvent($client,$dbcon,$id_event);
}

ここで、$ dbconは私のdvへの接続です。$ id_eventは、挿入したいデータを見つけることができるIDです(日付、内容、タイトル、時刻など)。 私はそれが好きではないが動作する。

0
追加された
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com