我的google oauth2授权请求回调网址中的#

时间:2013-06-03 13:20:17

标签: php oauth

我正在进行OpenID / oauth2登录。我对这个登录的东西非常接近最后的游戏,我闻到了胜利就在眼前。

我想我正在把两个问题压成一个。

我正在发出这样的授权请求:

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字符串的最后一个附件,我在那里发送一些base64encoded状态参数。

在用户授权Google授予我的应用程序权限以查看他们是谁之后,它会将用户传输到我的回调网址,并且似乎会将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。

1 个答案:

答案 0 :(得分: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”。