Laravel Passport:401未经身份验证,但加密密钥相同

时间:2018-09-21 14:43:26

标签: php laravel oauth-2.0

尽管我以前没有遇到过这样的问题,但是我在Passport身份验证中将应用程序部署到新站点时遇到了奇怪的问题。

我正在使用Passport的密码授予功能登录到应用程序(Laravel 5.4)。这是由于用户将其用户名/密码作为json发布到站点,然后从那里将这些凭据发布到oauth / token以获取站点的api密钥。过去这种方法运行良好,我的oauth密钥已提交到存储库。

前几天,我设法将站点部署到新服务器(使用相同的oauth密钥),重新生成(我认为)应用程序密钥,加载了具有加密密码的数据,并且身份验证正常。但是今天,我在另一个分支上做了同样的事情,现在登录返回401未经授权。

我几乎完成了所有可能想到的排列:删除oauth密钥,重新生成应用程序密钥,重新安装护照,但该应用程序拒绝登录。我认为这与源代码无关因为我对该分支所做的任何更改都不会影响登录系统。

我什至尝试将工作站点的应用程序密钥和oauth密钥复制到损坏的站点,仍然无法正常工作。

让我感到更加困惑的是,我有另一个站点,其中有一个不同应用程序密钥,不同 oauth密钥,但是数据相同,并且登录系统工作正常。

我对League / oauth2软件包的了解不足,无法理解为什么它不起作用。我想念什么?

谢谢,马特

1 个答案:

答案 0 :(得分:1)

好吧,错误的代码不会付钱。

我没有提到的是,我要部署的站点是将域移到新服务器的尝试。损坏的站点及其活动的姐妹站点都具有相同的域名。这是发布到我自己的域/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。问题解决了。