Laravel Passport的oauth/authorize返回基本身份验证。

3

我尝试在 Laravel Passport 上创建 OAuth2 服务器,并从第三方应用程序对其进行测试。OAuth 服务器使用 Laravel,客户端使用 Yii 框架。由于无法修改客户端前端,因此我创建了一个名为 /api/oauth/login 的路由,将请求转发到 OAuth 服务器:

public function actionOauthLogin()
{
   $query = http_build_query([
       'client_id' => '12',
       'client_secret' => '',
       'redirect_uri' => 'http://client.loc/api/oauth/callback',
       'response_type' => 'code',
       'scope' => '',
   ]);
   return $this->redirect('http://oauth-server.loc/oauth/authorize?' . $query);
}

这个方法处理/api/oauth/callback路由:
public function actionOauthCallback()
{
    $http = new Client();
    $response = $http->post('http://oauth-server.loc/oauth/token', [
        'form_params' => [
            'grant_type' => 'authorization_code',
            'client_id' => '3',
            'client_secret' => 'TJDyfygkuga45rtyfj8&65567Yhhgjjjj',
            'redirect_uri' => 'http://client.loc/api/oauth/callback',
            'code' => Yii::app()->request->getParamFromRequest('code'),
        ],
    ]);
    return json_decode((string) $response->getBody(), true);
 }

所有的都按照文档中的步骤实现了。但是当我打开 /api/oauth/login 时,会重定向到 oauth-server.loc/oauth/authorize?{params} 并出现一个 http basic auth 窗口。这是怎么回事?Nginx 没有这样的设置。有人知道我做错了什么吗?请帮帮我。


昨天我在Yii上安装了phpleague oauth2客户端(http://oauth2-client.thephpleague.com/providers/implementing/)。但结果还是一样的。 - epod
我遇到了完全相同的问题。你找到解决方案了吗?@epod - kirgy
3个回答

3

请确保'redirect_uri' => 'http://client.loc/api/oauth/callback' 与保存在 oauth_clients 表中与匹配的client_id相对应的重定向URL相同。


0

您需要在“oauth_clients”表中为我们的客户端设置“personal_access_client”和“password_client”列为0,并将redirect_uri设置为与请求相同。


0

我曾经遇到过同样的问题,在我的情况下,返回的参数告诉我我的解析范围无效;一些OAuth2 API需要范围,这可能是问题所在。

解决方案是将您的应用程序允许的作用域数组添加到AuthServiceProvider引导方法中。

// ../app/Providers/AuthServiceProvider.php
// ...
    public function boot()
    {

        $this->registerPolicies();
        Passport::tokensCan([
            'manage-devices' => 'Manage devices',
            'place-orders' => 'Place orders',
            'check-status' => 'Check order status',
        ]);

//..

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接