0

OpenID/oauth2 ログインを行っています。このログイン機能でエンドゲームが近づいています。勝利が近づいているにおいがします。

2 つの質問を 1 つにまとめていると思います。

次のような承認リクエストを作成しています。

if (!isset($_REQUEST['code']))
    {
        $login_path = "https://accounts.google.com/o/oauth2/auth?";
        $login_path .= "redirect_uri=" . $redirect_uri;
        $login_path .= "&response_type=token";
        $login_path .= "&client_id=" . $client_id;
        $login_path .= "&approval_prompt=force";
        $login_path .= "&scope=" . $scope;
        $login_path .= "&access_type=online";
        $login_path .= "&state=".base64_encode(strtr("cid=fffffff1", '-_,', '+/='));

        echo "<a href='" . $login_path . "'>login</a>";
    }

login_path 文字列の最後の追加部分に注意してください。ここでは、base64 でエンコードされた状態パラメーターをいくつか送信しています。

ユーザーが自分が誰であるかをアプリに許可することを Google に許可した後、ユーザーをコールバック URL に転送し、URL 変数をコールバック URL に追加するようです。これらの変数には、私が満足している状態パラメーターが含まれています。

私が満足していないのは、クエリ文字列の先頭を「?」で区切る代わりに、ハッシュタグ「#」を使用するため、文字列は次のようになることです。

http://www.talqo.com/oauth2callback.php#state=Y2lkPWZmZmZmZmYx&access_token=ya29.AHES6ZQ4LB22t7z0Wc8-5uACj_suJ8WnQJxKq9ICdvYT&token_type=Bearer&expires_in=3600

(何らかのセキュリティ上の問題がある場合に備えて、上記の access_token の一部の文字を変更しましたか?)

つまり、oauth2callback.php の直後に「#」があることがわかります。GET 変数を解析できません。

質問のイタチ 2)それに答えていただければ、フォローアップの質問があります。最終的な承認リクエストで ID を取得していないということですが、代わりに

{ "error" : "invalid_request" }

ただし、他の access_token、id_token、token_type、および expires_in を取得しています。

4

1 に答える 1

0

おっと!最初のログイン ページで、次のように変更しました。

$login_path .= "&response_type=token";

に:

$login_path .= "&response_type=code";

...そして今、私のコールバックアドレスは正しく読み取られます:

http://www.talqo.com/oauth2callback.php?state=Y2lkPWZmZmZmZmYx&code=4/QX4ZWs1ZDvManJ1x74pIGCOB0BQL.guKNfSajhLQfshQV0ieZDAow_X8UfgI

それでも、私は取得し続けます

{ "error" : "invalid_request" }

目的の「id」の代わりに。

于 2013-06-03T13:36:52.193 に答える