Laravel认证&使用REMOTE_USER进行授权

时间:2018-02-28 18:25:38

标签: php authentication laravel-5

我有以下设置:

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?

2 个答案:

答案 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);
    }
}

所以这解决了基于和已经过身份验证的用户自动登录的问题!