2012-03-09 10 views
5

私はGoogle AppsをPHPアプリケーションに統合しようとしています。私はすでにログインIDとパスワードを入力した後にユーザーにセッションIDを割り当てるログインシステムを持っています。ユーザーがログインするとデータベースに保存されます。セッションIDは、一定時間(ユーザーが設定可能) 5分、15分、60分...とすることができます)。そのセッションIDは、ユーザーがまだログインしているかどうかを確認するためにURLに渡されます。ログアウトすると、セッションIDがデータベースから削除されます。Google AppsとOAuthのベストプラクティス

私は、自分のGoogle IDをデータベースに保存して、ログインしたり、アクセストークンを要求したり、ユーザー情報を照会したり、Google IDがデータベースにあるかどうかを確認したりして、このユーザーのセッションID。他のAPIを照会できるようにしたいので、データベースにアクセストークンjsonも格納します。ユーザーがログアウトすると、アクセストークンもデータベースから削除されます。

  • :しかし、いくつかのものは私が私のワークフローに不安作るの不格好な感じ

    は、これは私のユーザーが自分のGoogleアカウントを使ってログインすることができ、動作し、私はAPIのは、保存されたaccess_tokenはを使用して照会することができますforce_approvalでrefresh_tokenを取得した場合、新しいアクセストークンを取得するためにこのリフレッシュトークンを使用する必要があります。データベースから古いものを削除し、ユーザーが再度ログインしたときに新しいトークンを入力する必要はありません。一方、ログイン時には誰がまだ誰なのかわからないので、どのリフレッシュトークンを使うのか分かりません。たぶん私はリフレッシュトークンが何であるか誤解しています。また、毎回承認を強制したくないので、その場合はrefresh_tokenを使用することもできません。

  • としては、ユーザーが自分のセッションがいつまで続くかを決定することができ、前に言った、しかし、Googleのaccess_tokenは、常に3600秒後に期限が切れます。ユーザーがシステムで1時間働くと、突然Google APIが突然失敗し、再度ログインすると、本当にばかげてしまうだろう。 Google OAuthプレイグラウンドでは、「有効期限が切れる前にトークンを自動更新する」チェックボックスが表示されますが、これを行う方法はわかりません。ここでリフレッシュトークンを使用する必要がありますか?または、単に新しいトークンをバックグラウンドで要求します(私が承認を強制していない場合)?

  • 現時点では、userinfoクエリ(https://www.googleapis.com/oauth2/v2/userinfo)を使用してユーザーIDを検索していますが、tokeninfo(https: /www.googleapis.com/oauth2/v1/tokeninfo)。 Tokeninfoはoauthプレイグラウンドにはリストされていませんが、トークンが有効である期間が表示されます(ただし、これも自分で計算できます)。一つは他のものよりも好ましいですか?

  • データベース(access_token、id_token、expires_in、およびtoken_type)にjsonオブジェクト全体を格納していますが、私はaccess_tokenを格納するだけでアプリケーションが完全に機能すると感じます(expires_in時間変更)。例えばid_tokenを格納する必要がありますか?

私は時々非常に、誰もが情報の他の良い情報源を知っているなら、私は同様にそれらに興味があり、欠け(developers.google.comで)Googleのドキュメントを見つけます。

答えて

4

私はあなたのuserinfoエンドポイントのような概念から来た最新のOpenID Connect Specsで見ていた場合、それは役立つかもしれないと思います。 OpenID connectはOAuth 2の上に構築されています。そこにはかなりの部分がありますが、それでも見てみる価値はまだあります。 This blog articleも(同じブログの他の人たちと同じように)とても良いです。

は残念ながら、私はそれはおそらくいくつかの時間のための移動対象となりますので、Googleの実装は現在、最新スペックのドラフトでの最新のものであるとは思いません。これらのことは過去1年間で大きく変わってきました。

私は、古いものを更新するのではなく、ユーザーを認証するたびに新しいアクセストークンを取得する必要があるという最初の点に同意します。ユーザーがログインしてアクセストークンを与えるまで、そのユーザーは誰であるか分かりません。一般に、アクセストークンの存続期間は、ユーザーのセッションにリンクされていません。発行されると、アプリケーションは理論的には、アプリケーションを使用してユーザーの存在とは関係なくリソースにアクセスできます。トークンの有効期限を超えてリソースにアクセスする場合は、その時点でリフレッシュトークンを送信して新しいアクセストークンを取得する必要があります。私は "オートリフレッシュ"機能が何であるか分かりません。

Googleのtokeninfoは、OpenID接続のcheck_idエンドポイントに似ていますが、後者だけでなく、アクセストークンまたはIDトークンのいずれかを受け入れると考えています。有効期限は2つの場合があります。典型的には、より細かいユーザーデータをエンドポイントからcheck_id(通常は裸のuser_idを返す)よりも取得できます。

id_tokenを保存する必要はありません。これは、認証サーバーによるユーザー認証の記録のようなものです。アクセストークンは、ユーザーIDを検証すると、アプリケーションが保守に関心を持つものです。

+0

あなたのご意見をお寄せいただきありがとうございます。私はあなたが提供した記事を読んで、彼らが道に沿って私を助けてくれることを願っています。 – Bram