0

我正在做一个 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 字符串的最后一个附件,我将在其中发送一些 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 回答