看看这个google client api for php example
我注意到这部分代码:
/************************************************
If we have a code back from the OAuth 2.0 flow,
we need to exchange that with the authenticate()
function. We store the resultant access token
bundle in the session, and redirect to ourself.
************************************************/
if (isset($_GET['code'])) {
$client->authenticate($_GET['code']);
$_SESSION['access_token'] = $client->getAccessToken();
$redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));
}
问题是我没有获得重定向(header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));
)。事实上你可以删除它,一切似乎都很好。那么,为什么会这样呢?
答案 0 :(得分:1)
你没有得到哪个重定向?
代码换码是标准Oauth2流程的一部分(所谓的“授权授权”)。您可以在此处阅读有关交换的信息:https://docs.auth0.com/protocols#4(或此处的规范:http://tools.ietf.org/html/draft-ietf-oauth-v2-31#section-4.1)。该规范有点难以解析。
code
已发布到您网站上的特定位置(/callback
),因为它通常是在IdP注册的固定位置。之后的任何其他重定向通常是将用户发送到他们最初想要登陆的实际资源。或者只是到(经过验证的)家中。例如:如果用户想要转到https://yoursite/someplace
但是需要进行身份验证,则可能会发生这种情况:整个流程都会发生,之后会重定向到/someplace
。