laravel 跨域身份验证 cookie 和过滤器

Posted

技术标签:

【中文标题】laravel 跨域身份验证 cookie 和过滤器【英文标题】:laravel cross domain auth cookies and filters 【发布时间】:2014-12-30 07:07:20 【问题描述】:

我有一个管理多个域的 laravel 网络服务器,例如:

site1.domain.com, site2.domain.com, site3.domain.com

我非常成功地将站点名称添加到用户身份验证过程中,因此每个用户都有一个与站点相关的用户表。跨站点的用户没有持久性,他们被认为是唯一的。这很好用。

对于每个站点,都有一个后端,例如。

site1.domain.com/office

为此,我有一组不同的模型管理员用户。为了完成这项工作,我有一组完全不同的身份验证路径、不同的控制器等等。我通过以下过滤器实现了这一点。

App::before(function($request)

  if ($request->is('office*'))
  
    Config::set('auth.driver', 'eloquent.admin');
    Config::set('auth.model', 'Admin');

这些管理员在各个域中都很常见。也就是说用户名在admin模型中是唯一的。

这很好,但需要继续。

我希望站点之间的登录和注销保持一致。也就是说,如果管理员登录了一个站点办公室,则他们已全部登录,而他们退出,则已全部注销。

我试图更新我的过滤器:

App::before(function($request)

  if ($request->is('office*'))
  
    Config::set('auth.driver', 'eloquent.admin');
    Config::set('auth.model', 'Admin');

    Config::set('session.path', '/office');
    Config::set('session.domain', '.domain.com'); // tried without leading . too
  
);

但是,如果我在浏览器中分析我的 cookie,域和路径信息并没有受到影响,并且分别保持为 site.domain.com 和 /。

您能告诉我如何根据我的请求更改会话 cookie 属性吗?

存在站点依赖性。管理员和站点之间存在多对多关系,这决定了管理员是否可以访问特定站点的 /office。

我担心如果管理员登录,他们将可以访问任何站点办公室。

我的目的是编写一个额外的过滤器“可以管理这个站点”来检查关系。

您认为在提议的管理员跨域身份验证的上下文中,这是一个合适的衡量标准吗?

【问题讨论】:

如果您不介意在站点之间共享所有用户,您可以将 cookie 域更改为 .domain.com。其他选项是创建新的身份验证保护/模型来生成/检查单独的 JWT cookie。 【参考方案1】:

如果您打开app/config/session.php,您使用的是什么驱动程序?有些,例如文件,似乎没有跨通配符子域存储数据。

我使用 Redis 解决了这个问题(如果您使用的是 Homestead,它应该已经可供您使用):

'driver' => 'redis',

    'redis' => array(

    'cluster' => true,

    'default' => array(
        'host'     => '127.0.0.1',
        'port'     => 6379,
        'database' => 0,
    ),

),

这与不同的驱动程序如何使用主机名来引用会话数据有关。

【讨论】:

以上是关于laravel 跨域身份验证 cookie 和过滤器的主要内容,如果未能解决你的问题,请参考以下文章

使用 laravel 5.1 和 jwt 使用 cookie 进行身份验证

跨域身份验证

如何检查用户是不是通过 Laravel 上的 cookie 会话进行身份验证?

Laravel 中基于 Vue cookie 的身份验证

基于JWT的web api身份验证及跨域调用实践

laravel 和 vuejs 的身份验证问题