hyp*_*hen 5 php http-status-code-401 auth0
在使用 auth0 PHP SDK 进行身份验证后,我正在努力获取用户信息。这是在我的本地主机上使用 ngrok。我只是使用 SDK 中的基本示例文件,我可以正常登录。但是,登录后,当它重定向到我的回调 url 并尝试交换身份验证代码时,我收到“未经授权”的 401 错误。
这是 wamp 中的错误:
在日志中,我可以看到登录成功,但是在尝试交换身份验证代码时,它失败了。
我还可以确认我正在获取查询参数中的代码和状态:
https://myurl.ngrok.io/auth/?code=ygKukP3B5_xk0pbb&state=5ae5b7a643aa46.52329844
Run Code Online (Sandbox Code Playgroud)
在尝试使其工作时,我对示例文件进行了一些轻微修改,但我认为这不是罪魁祸首。以防万一,这里是代码:
require 'vendor/autoload.php';
//require 'dotenv-loader.php';
use Auth0\SDK\Auth0;
$domain = 'mydomain.auth0.com';
$client_id = 'MYCLIENT';
$client_secret = 'MYSECRET';
$redirect_uri = 'https://myurl.ngrok.io/auth/';
$auth0 = new Auth0([
'domain' => $domain,
'client_id' => $client_id,
'client_secret' => $client_secret,
'redirect_uri' => $redirect_uri,
'persist_id_token' => true,
'persist_refresh_token' => true,
'audience' => 'https://mydomain.auth0.com/userinfo',
'scope' => 'openid profile'
]);
if (isset($_REQUEST['logout'])) {
$auth0->logout();
session_destroy();
header("Location: /");
die();
}
if(isset($_REQUEST['code'])) {
$userInfo = $auth0->getUser();
var_dump($userInfo);
} else {
$auth0->login();
}
Run Code Online (Sandbox Code Playgroud)
更新:
我还注意到,当页面第一次加载时,我收到了前面提到的错误。如果我刷新页面,我得到Fatal error: Uncaught Auth0\SDK\Exception\CoreException: Invalid state
我在一个应用程序上遇到了这个问题,该应用程序可在两个子域上使用a,b但仅用b作配置的应用程序域。当用户访问aAuth0 的随机数(又名状态)时,创建的目的只是为了a导致验证失败,因为当 Auth0 重定向回配置的应用程序 url 时,会话为空b。
我通过将 php 的 cookie 域设置为b.. 具体来说,在我的 laravel 应用程序中,我设置了 envvar
SESSION_DOMAIN=b