3

単一ページ (javascript) アプリケーションで Google HTML サインイン ボタンを使用して、Google ログインを持つユーザーから認証オブジェクトを取得しています。これについては、https ://developers.google.com/+/web/signin/add-button で詳しく説明しています。

以下に示すようなトークンを正常に受け取りました。このトークンは 1 時間で期限切れになるため、ユーザーがログアウトするまで、約 30 分ごとにトークンを更新する必要があります。私は電話してこれを試みています:

gapi.auth.authorize({client_id: "90... ...92.apps.googleusercontent.com", scope: "profile email", immediate: true}, function() { console.log( arguments ); } );

しかし運がない。有効期限が切れるまで同じトークンを受け取り、その後は空の (サインインしていない) トークンを受け取ります。ユーザーが継続的に再度ログインしなくても、ベアラートークンを保持/更新するにはどうすればよいですか?

{
    _aa: "1"
    access_token: "ya29.1.AA... ...BByHpg"
    authuser: "0"
    client_id: "90... ...92.apps.googleusercontent.com"
    code: "4/Nyj-4sVVcekiDnIgMFh14U7-QdRm.svPMQSODiXMbYKs_1NgQtmX9F90miwI"
    cookie_policy: "single_host_origin",
    expires_at: "1398341363",
    expires_in: "3600",
    g_user_cookie_policy: undefined,
    id_token: "eyJhbGciOiJ... ...0Es1LI"
    issued_at: "1398337763",
    num_sessions: "2",
    prompt: "none",
    response_type: "code token id_token gsession",
    scope: "https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email",
    session_state: "b92d67080... ...73ae",
    state: "",
    status: {
       google_logged_in: true,
       method: "AUTO",
       signed_in: true
    },
    token_type: "Bearer"

}
4

2 に答える 2

2

クライアント側のフロー(Java Script など) を使用すると、短時間 (~1 時間) しか受信できませんaccess_token。更新できるようにしたい場合は、サーバー側のフローrefresh_tokenを使用してのみ取得できる が必要です。

詳細については、こちらをご覧ください。

基本的に、次のように機能します。

  1. ユーザーが Web サイトに接続し、「サインイン ボタン」をクリックします。
  2. JavaScript でaccess_token と を受け取りますcode
  3. これcodeを Web サーバー上の PHP スクリプトに送信します。
  4. スクリプトは Google サーバーにリクエストを送信しcodeaccess_token(JavaScript で受け取ったものと同じはずです)とrefresh_token
  5. これは一度だけ発行されるため(ユーザーが許可を与えたときrefresh_token)、どこかに(データベースなどに)保存する必要があります。
  6. あなたのいずれかがaccess_token期限切れになると、あなたはあなたを使用 refresh_tokenして別の有効なものを取得できますaccess_token
于 2014-05-22T11:30:26.287 に答える