【问题标题】:What Am I Missing for this Custom Authentication in Laravel 8Laravel 8 中的自定义身份验证缺少什么
【发布时间】:2022-01-02 04:39:57
【问题描述】:

我有一个使用 SAML2 进行身份验证的网站。我根本不管理 SSO,而是我的站点是需要 SSO 身份验证才能进入的门户的一部分。我目前有从 request->server 对象获取 SAML 属性的中间件,然后执行各种任务,例如检查它们是否具有从属关系,是否允许这些从属关系等...

这个中间件被添加到内核中,以便它为每个 HTTP 请求运行。我想修改这个中间件以使其更干净,并使用 Laravel 的原生 Auth 外观(我们正在检查是否已设置用户的会话变量以确定用户是否已经登录,而不是 auth-> check(),例如)。

我已经阅读了几篇关于如何绕过 Laravel Breeze 入门套件附带的身份验证并制作自己的教程。没有一个完全符合我需要做的,但概念是一样的:

  1. 创建模型(使用已有的 User 模型,稍作调整)
  2. 创建一个服务提供者(创建一个实现 UserProvider 接口的新提供者)
  3. 创建一个 Guard(创建了一个实现 Guard 接口的新保护)

我可以理解这三件事并做到了,但我不确定如何将它们放在一起。

我更新了我的 config/auth.php 文件以包含新的守卫和提供者:

然后我更新了 App\Providers\AuthServiceProvider 的启动方法以包含我创建的提供程序和保护:

但是现在呢?我想这是我缺少的部分。

谁能帮助我弥补缺失的部分?我正在使用 Laravel 框架 8.73.1。

【问题讨论】:

  • 请注意:将您的代码以文本形式发布,最好以代码块形式发布,而不是以图像形式发布。它使阅读尤其是复制变得更加困难,以便尝试或在答案中引用它)

标签: laravel laravel-8 laravel-authentication laravel-authorization


【解决方案1】:

现在你只需要使用 auth laravel 中间件保护你的路由(假设你的守卫和提供者实现是正确的)

你有两个选择:

  1. 替换默认防护。打开config/auth.php 并查找以下行:
'defaults' => [
        'guard' => 'web', // --> Replace with saml
        'passwords' => 'users',
    ],

现在,将 auth 中间件添加到您的路由中,一切顺利。您可以使用 laravel 文档中描述的 Auth 外观。

  1. 保持 laravel one 作为默认值,单独使用你的保护。您只需指定在使用 Auth 门面或中间件时要使用的守卫。

你需要使用的中间件是auth:saml,门面调用必须以guard('saml')为前缀。例如。 Auth::guard('saml')->user().

【讨论】:

  • 如果我想让中间件为每个 HTTP 请求运行怎么办?我有一个中间件可以运行另一个项目中的每个请求,我只是将它添加到 app/Http/Kernel.php 文件中的 $middleware 中。我不清楚是否应该添加默认的 Authenticate.php 中间件,因为我没有在这里创建任何新的中间件。
  • 如果你将你的守卫设置为默认值,那么是的,你应该在那里添加\App\Http\Middleware\Authenticate::class。否则,您可以在 RouteServiceProvider 中添加自定义中间件
猜你喜欢
  • 2015-02-23
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
  • 2014-03-30
  • 2016-04-18
  • 1970-01-01
  • 2020-10-31
相关资源
最近更新 更多