php - Laravel Passport:401 未经身份验证,但加密密钥相同
问题描述
我在将应用程序部署到新站点的 Passport 身份验证中遇到了一个奇怪的问题,尽管我之前没有遇到过这个问题。
我正在使用 Passport 的密码授予功能来登录应用程序(Laravel 5.4)。这发生在用户将他的用户名/密码作为 JSON 发布到站点,然后从那里将这些凭据发布到 OAuth/token 以获取站点的 API 密钥。这在过去运行良好,并且我的 OAuth 密钥已提交到存储库。
前几天,我设法将站点部署到新服务器(使用相同的 OAuth 密钥),重新生成(我认为)应用程序密钥,加载具有加密密码的数据,并且身份验证工作正常。然而,今天我在不同的分支上做了同样的事情,现在登录返回 401 Unauthorized。
我几乎完成了我能想到的所有排列:删除 OAuth 密钥、重新生成应用程序密钥、重新安装护照,但应用程序拒绝登录。我不相信它与源代码有任何关系,因为没有更改我在这个分支上做的会影响登录系统。
我什至尝试将工作站点的应用程序密钥和 OAuth 密钥复制到损坏的站点仍然不起作用。
让我更加困惑的是,我有另一个站点,它具有不同的应用程序密钥、不同的 OAuth 密钥,但数据相同,并且登录系统工作正常。
我对联盟/oauth2 软件包的了解不足以理解为什么这不起作用。我错过了什么?
谢谢,马特
解决方案
好吧,糟糕的代码是不值得的。
我没有提到的是,我尝试部署的站点是尝试将域移至新服务器。损坏的站点和它的活动姊妹站点都具有相同的域名。这是发布到我自己的域/oauth/token
端点的代码:
$username = Input::json('username');
$password = Input::json('password');
$page = Input::get('page');
$client = Client::find(2);
$http = new GuzzleHttp\Client();
try {
$response = $http->post(url('oauth/token'), [ # <-- see the problem?
'form_params' => [
'grant_type' => 'password',
'client_id' => '2',
'client_secret' => $client->secret,
'username' => $username,
'password' => $password,
'scope' => '',
],
]);
#...
这个问题比较搞笑。由于该站点的 DNS 尚未切换,因此对我自己站点的请求将转到旧站点,而不是这个。因此我要回来了Unauthenticated
。因为我不是。
解决方案是编辑/etc/hosts
服务器上的文件以将域指向自身。这样,任何对它自己的 api 的调用实际上都会转到它自己的 api。问题解决了。
推荐阅读
- tableau-api - 无法从 tableau 服务器获取令牌
- java - 如何在 Spring Boot 中跟踪/监视套接字连接?
- angular - 代理配置错误(使用自定义登录的 ngx-admin) - 错误 GET http://localhost:4200/api/login 404(未找到)
- java - AclClassIdUtils : 无法获取类 id 类型
- mongodb - 从嵌套数组中移动数据
- excel - 有没有办法修复代码以检查文本框或组合框是否为空?
- redux - 如何处理 Redux Reducer 中的错误和异常?
- c# - g.Draw 经常闪烁
- javascript - Javascript:如何按顺序运行慢速函数?
- java - 处理片段中的空回收查看器