auth0 401 错误,在尝试身份验证代码交换时进行身份验证

Posted

技术标签:

【中文标题】auth0 401 错误,在尝试身份验证代码交换时进行身份验证【英文标题】:auth0 401 error after authentication while attempting auth code exchange 【发布时间】:2018-10-09 17:30:57 【问题描述】:

在使用 auth0 php SDK 进行身份验证后,我很难获取用户信息。这是在我的本地主机上使用 ngrok。我只是使用 SDK 中的基本示例文件,我可以正常登录。但是,登录后,当它重定向到我的回调 url 并尝试交换身份验证代码时,我收到“未经授权”的 401 错误。

这是 wamp 中的错误:

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

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

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】:

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

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

【讨论】:

以上是关于auth0 401 错误,在尝试身份验证代码交换时进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security - 获取登录页面时,安全性尝试进行身份验证并返回 401 错误

CAS HTTP 401 - 身份验证失败:凭据错误

Phonegap错误:401未经授权 - 在Phonegap中使用基本身份验证的Rest API

带有 auth0-lock 的 Auth0 仅在使用调试器时进行身份验证,以缓慢单步执行代码

我应该使用中间件还是使用防护来通过Auth0和nestjs进行身份验证?

JWT 身份验证始终返回 401 HTTP 错误 asp.net core