我有以下设置:
Apache Server 2.4.x,它使用Kerberos进行SSO Laravel 5.5 PHP 7.x. MSSQL Database 12具有现有的数据库结构,可以自定义Usertable
在我的Laravel应用程序中,用户只有在他/她已经通过apache登录时才能访问该应用程序,这意味着我可以从服务器检索REMOTE_USER变量
$user = $_SERVER['REMOTE_USER'];
我打算做的是对应用程序的其余部分使用Laravel身份验证和授权。我已经研究了很多例子,但没有发现任何真正合适的例子。
在访问应用程序获取凭据时,是否可以提示如何验证Laravel中的$ user?
答案 0 :(得分:0)
几个小时后我设法让它发挥作用:
我使用Homecontroller和
public function index()
在函数index()中,我使用了以下代码:
$user = $_SERVER['REMOTE_USER']; // user from apache $env variable
// authenticated via kerberos
$user = DB::table('users')
->where('users.name',"=",$user)
->first();
Auth::attempt(['name' => $user->name, 'password' => "xxx"]);
return view('start');
也许这对某人有用!
答案 1 :(得分:0)
Homecontroller还不够,所以我在每个控制器中创建了一个使用它的中间件:
public function __construct()
{
$this->middleware('logincustom');
}
此中间件
class CustomLogin
{
public function handle($request, Closure $next)
{
$user = $_SERVER['REMOTE_USER']; // get remoteusername
if (Auth::user() != null) { // if user not null
if ($user == Auth::user()->login) { // check if remoteuser is equal to currently login user
if (Auth::check()) {
return $next($request);
}
}
}
$user = DB::table('settings.user')
->where('login',"=",$user)
->first();
$authenticated = Auth::attempt(['login' => $user->login, 'password' => "xxx"]);
if ($authenticated == null ) {
abort(403, 'Unauthorized action.');
}
return $next($request);
}
}
所以这解决了基于和已经过身份验证的用户自动登录的问题!