尝试验证代码交换时身份验证后出现auth0 401错误

时间:2018-04-29 12:37:32

标签: php auth0 http-status-code-401

在使用auth0 PHP SDK进行身份验证后,我很难获取用户信息。这是在我的localhost上使用ngrok。我只是使用SDK中的基本示例文件,并且我能够正常登录。但是,在登录后,当它重新定向到我的回调网址并尝试交换授权代码时,我收到401错误,其中包含#34;未授权"。

这是wamp中的错误:

401 error

在日志中,我可以看到登录成功,但在尝试交换验证码时,它失败了。

logs

我还可以确认我在查询参数中获取了代码和状态:

https://myurl.ngrok.io/auth/?code=ygKukP3B5_xk0pbb&state=5ae5b7a643aa46.52329844

我尝试对此示例文件进行了一些细微的修改,但我并不认为这是罪魁祸首。以防万一,这里是代码:

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();
}

更新

我还注意到,当页面首次加载时,我得到前面提到的错误。如果我刷新页面,我会得到Fatal error: Uncaught Auth0\SDK\Exception\CoreException: Invalid state

1 个答案:

答案 0 :(得分:0)

我在两个子域ab上可用的应用程序上遇到了这个问题,但仅使用b作为已配置的应用程序域。当用户访问a时,仅为a创建了Auth0的现时状态(又称状态),由于Auth0重定向回b上已配置的应用程序URL,由于会话为空,导致验证失败。 / p>

我通过将php的cookie域设置为b.解决了这个问题。具体来说,在我的Laravel应用中,我设置了envvar SESSION_DOMAIN=b