通过Windows身份验证在Laravel中验证用户

时间:2015-06-23 09:47:15

标签: php authentication laravel iis laravel-5

我在IIS 7.5上的Windows域中运行PHP。

通过IIS启用Windows身份验证,因此用户DOMAIN \ USERNAME可通过PHP中的$_SERVER['AUTH_USER']获取。

我刚刚为新的内部网站安装了Laravel 5,并且需要一种方法来使用单点登录方式对Laravel中的用户进行身份验证。

最终用户应该在Laravel中进行身份验证,而无需在任何地方登录,因为他们已经对域进行了身份验证。

我已经四处寻找,实际上无法找到相关内容!

有没有关于此的文章?当然它是一个非常常见的用例?我应该从哪里开始阅读,或者是否有人可以直接帮助?

1 个答案:

答案 0 :(得分:5)

假设设置了$_SERVER['AUTH_USER'],您可以在App\Http\Middleware\Authenticate中使用以下内容:

<?php namespace App\Http\Middleware;

use Closure;
use App\User;
use Illuminate\Contracts\Auth\Guard;

class Authenticate {

    /**
     * The Guard implementation.
     *
     * @var Guard
     */
    protected $auth;

    /**
     * Create a new filter instance.
     *
     * @param  Guard  $auth
     * @return void
     */
    public function __construct(Guard $auth)
    {
        $this->auth = $auth;
    }

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ($request->server('AUTH_USER') && ($user = User::where('username', $request->server('AUTH_USER'))->first()))
        {
            $this->auth->login($user);
        }
        else
        {
            return redirect()->guest('auth/login');
        }

        return $next($request);
    }

}

现在添加middleware to your routes

然而,这确实假设您的用户已存在。如果用户不存在,您可以更改重定向以动态创建用户。