【问题标题】:Laravel Passport oauth/authorize returns basic authLaravel Passport oauth/authorize 返回基本身份验证
【发布时间】:2018-02-06 18:58:29
【问题描述】:

我尝试在 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 基本身份验证窗口。什么? Nginx 没有这样的设置。有人知道我做错了什么吗?请帮帮我。

【问题讨论】:

标签: php yii oauth laravel-5.3 laravel-passport


【解决方案1】:

确保'redirect_uri' => 'http://client.loc/api/oauth/callback'oauth_clients表中保存的重定向url相同,匹配client_id

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,在我的情况下,返回的参数告诉我我解析的范围无效;一些 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',
            ]);
    
    //..
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2018-05-22
        • 1970-01-01
        • 2018-01-05
        • 2016-04-22
        • 1970-01-01
        • 2021-08-15
        • 2017-05-13
        • 1970-01-01
        • 2021-01-01
        相关资源
        最近更新 更多