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 を取得しています。