使用 Laravel Socialite 的社交网络身份验证的安全性

The security of the social network authentication using Laravel Socialite

我在 Laravel 应用程序中使用 Socialite 进行社交网络身份验证。我想使用社交网络添加注册,而无法通过输入用户名和密码使用经典注册方法。目前,我决定创建一个包含名称和用户名的用户模型,用于授权和在数据库中为每个包含 user_id 和来自社交网络的 id 作为 PK 的社交网络分隔 tables。

当系统在所选社交网络中收到用户 ID 时,它会检查该 ID 的适当 table,如果它存在 - 获取用户 ID 并向系统验证用户身份。如果没有 - 在那里添加并进行身份验证。

处理社交网络响应的函数:

public function handleProviderCallback($social)
{
    $userSocial = Socialite::driver($social)->user();

    $registeredUser = DB::table($social.'_accounts')->find($userSocial->id);

    if(!empty($registeredUser)) {
        Auth::loginUsingId($registeredUser->user_id);
    }else{
        $user = new User;
        $user->name = $userSocial->name;
        $user->username = 'user2222'; //will be implementer in future
        $user->avatar = $userSocial->avatar;
        $user->save();

        DB::table($social.'_accounts')->insert(['id' => $userSocial->id, 'user_id' => $user->id ]);
        Auth::loginUsingId($user->id);
    }

        return redirect()->action('HomeController@index');
}

问题是关于安全性的,你能解释一下这个解决方案是否非常安全吗?我的意思是没有密码的身份验证,以防万一从社交网络接收用户的 ID。是否可以伪造来自社交网络的查询以获得对 smb'a 帐户的访问权限?

由于您使用的是 oAuth,因此这是用户身份验证的首选方法。

由于您使用的是 Socialite,因此它会自动检查提供商以防止虚假请求被触发。 因此,是的,这将被认为是安全的。