single-sign-on - Laravel 临时 SSO 方法
问题描述
我们希望在我们的程序中实现类似 SSO 的方法,用户将在第三方程序中注册并在我们的程序中同步注册并验证来自第三方的登录/注销。由于我们无权访问第三方的身份验证。第三方程序是我们客户的程序,它希望使用我们程序的服务。
由于像miniorage这样的软件包不是免费的,我们需要努力做到这一点。
这是我所做的并将尝试完成:
已经完成的代码:
- 在我们的程序中安装 laravel/passport。
- 创建一个注册API,第三方客户端可以使用它在我们的程序中注册
- 使用护照,它将返回他们需要保存在系统中的不记名令牌(删除到期日期)
- 创建一个将接受在注册期间创建的不记名令牌的 URL
- 打开 URL 后,我将能够使用
Auth::user()
并获取用户信息。
试图完成:
$credentials = ([
'email' => 'test@gmail.com',
]);
if (Auth::attempt($credentials)) {
Log::info(Auth::user());
}
- 从 Auth::user() 获取电子邮件地址并使用上面的代码重新登录
- 但是,当我打开另一个页面时, Auth::user() 是空的。
我的问题是:
1 这种方法适用于临时 SSO 吗?
2 即使我手动登录用户,为什么 Auth::user() 在不同的 url 上为空?
更新
所以我想我会继续使用 Laravel Passport 作为我们项目的临时 SSO。但是,当我在标头中传递令牌时,我想做一个 Auth::login() :
这将是代码:
public function authenticate()
{
$user = Auth::user();
Log::info($user);
. . . . . .
$authuser = User::where('email', '=', $user->email)->first();
$authuser = Auth::login($authuser);
Log::info($authuser);
return $user;
}
我希望在这里使用 Auth::Login 的原因是用户在所有页面上都经过身份验证。不只是在第一页。当function authenticate
我使用承载令牌访问程序时使用 。在该$authuser
部分中,我想仅使用电子邮件重新登录用户。之所以只有电子邮件,是因为之前的逻辑。是的,我们已经考虑过这个。但是,当我使用 Auth::login($authuser); 时,它会返回Method Illuminate\Auth\RequestGuard::login does not exist
错误消息。
您希望看到的可能数据:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
'hash' => false,
],
],
api => driver
最初是在 laravel 护照实施之前的 token
解决方案
这种方法适用于临时 SSO 吗?
它可能适用于 Passport,但它并不是真正的预期用途 (OAuth2)。我发现它比推出自定义解决方案更令人困惑:
安装 JWT 身份验证 - https://jwt-auth.readthedocs.io/en/develop/laravel-installation/
在config/auth.php中设置守卫
我会考虑使用手动 JWT 身份验证解决方案(https://jwt-auth.readthedocs.io/en/develop/laravel-installation/)
2 即使我手动登录用户,为什么 Auth::user() 在不同的 url 上为空?
很可能是因为路由/控制器方法缺少说明它是经过身份验证的身份验证中间件。
推荐阅读
- c# - 批处理作业和电子邮件调度程序的基础知识
- html - @font-face 什么时候加载字体?
- python - 如何选择一个下拉菜单值与硒使用 python
- tcl - 从文件中逐行读取 *TCL
- rasa-nlu - 创建评估 RASA 聊天机器人问题
- javascript - 将一个按钮与另一个居中的按钮内联
- python - 不明白如何解决错误信息
- gremlin - 配置 gremlin-server 以使用 UUID 作为 vrtices 和边缘的 id
- php - 适用于 Oracle DB 的 PHP OCI8 不适用于 Windows 上的 IIS (OCI_CRED_EXT)
- html - 如何根据 CSS 转换的百分比计算像素?