最近经常有人问如何使用laravel的身份认证功能,因为laravel的身份认证方式比较多,laravel的作者最近专门写了一文章来解释说明,以下为译文:
laravel认证生态系统概述
Laravel提供了一些与身份验证相关的软件包。在继续之前,我们将回顾Laravel中的常规身份验证生态系统,并讨论每个软件包的预期目的。
首先,请考虑身份验证的工作原理。使用网络浏览器时,用户将通过登录表单提供其用户名和密码。如果这些凭据正确,则应用程序将在用户的会话中存储有关经过身份验证的用户的信息。发布给浏览器的cookie包含会话ID,以便对应用程序的后续请求可以将用户与正确的会话相关联。接收到会话cookie后,应用程序将基于会话ID检索会话数据,注意身份验证信息已存储在会话中,并将用户视为“已身份验证”。
当远程服务需要进行身份验证才能访问API时,通常不使用cookie,因为没有Web浏览器。而是,远程服务根据每个请求将API令牌发送到API。应用程序可以对照有效API令牌表验证传入令牌,并“认证”与该API令牌相关联的用户正在执行的请求。
Laravel的内置浏览器身份验证服务
Laravel包含内置的身份验证和会话服务,通常可以通过Auth
和Session
Facades访问它们。这些功能为从Web浏览器发起的请求提供基于cookie的身份验证。它们提供了允许您验证用户凭据并验证用户身份的方法。另外,这些服务将自动在用户的会话中存储正确的数据并发出正确的会话cookie。本文档中包含有关如何使用这些服务的讨论。
Jetstream / Fortify
如本文档中所述,您可以手动与这些身份验证服务交互以构建应用程序自己的身份验证层。但是,为了帮助您更快地入门,我们发布了免费软件包,这些软件包为整个身份验证层提供了强大而现代的脚手架。这些软件包是Laravel Jetstream和Laravel Fortify。
Laravel Fortify是Laravel的无头(headless)身份验证后端,它实现了本文档中的许多功能,包括基于cookie的身份验证以及其他功能,例如( two-factor)双因素身份验证和电子邮件验证。Laravel Jetstream是一个UI,它使用由Tailwind CSS,Laravel Livewire和/或Inertia.js提供支持的美观、现代的UI来使用Fortify的身份验证服务并将其公开。Laravel Jetstream除了提供基于浏览器的cookie身份验证之外,还包括与Laravel Sanctum的内置集成以提供API令牌身份验证。Laravel的API身份验证产品将在下面讨论。
Laravel的API身份验证服务
Laravel提供了两个可选的软件包来帮助您管理API令牌和认证使用API令牌发出的请求:Passport和Sanctum。请注意,这些库和基于Laravel的内置cookie的身份验证库不是互斥的。这些库主要关注API令牌身份验证,而内置身份验证服务则关注基于cookie的浏览器身份验证。许多应用程序将同时使用Laravel的基于内置cookie的身份验证服务和Laravel的API身份验证程序包之一。
Passport
Passport是OAuth2身份验证提供程序,提供各种OAuth2“授权类型”,使您可以颁发各种类型的令牌。通常,这是用于API身份验证的强大而复杂的程序包。但是,大多数应用程序都不需要OAuth2规范提供的复杂功能,这会使用户和开发人员感到困惑。另外,从历史上看,开发人员对于如何使用Passport等OAuth2身份验证提供程序对SPA应用程序或移动应用程序进行身份验证感到困惑。
Sanctum
为了应对OAuth2的复杂性和开发人员的困惑,我们着手构建一个更简单,更简化的身份验证程序包,该程序包既可以处理来自Web浏览器的第一方Web请求,也可以处理通过令牌的API请求。Laravel Sanctum的发布实现了这一目标,对于那些除了API之外还将提供第一方Web UI或将由单页面应用程序提供支持的应用程序,Laravel Sanctum的发布应被视为首选和推荐的身份验证程序包。与后端Laravel应用程序或提供移动客户端的应用程序分开存在。
Laravel Sanctum是Web / API混合身份验证程序包,可以管理应用程序的整个身份验证过程。这是可能的,因为当基于Sanctum的应用程序收到请求时,Sanctum将首先确定该请求是否包括引用已验证会话的会话cookie。Sanctum通过调用我们前面讨论的Laravel的内置身份验证服务来实现此目的。如果未通过会话cookie对请求进行身份验证,Sanctum将检查请求中的API令牌。如果存在API令牌,Sanctum将使用该令牌对请求进行身份验证。要了解有关此过程的更多信息,请查阅Sanctum的“工作原理”文档。
Laravel Sanctum是我们选择包含在Laravel Jetstream身份验脚手架中的API程序包,因为我们认为它最适合大多数Web应用程序身份验证需求。
总结与选择
总之,如果将使用浏览器访问您的应用程序,则您的应用程序将使用Laravel的内置身份验证服务。
接下来,如果您的应用程序提供了API,则您将在Passport或Sanctum之间进行选择,以为您的应用程序提供API令牌认证。通常,应该尽可能使用Sanctum,因为它是API身份验证,SPA身份验证和移动身份验证的简单,完整的解决方案,包括对“范围(scopes)”或“功能(abilities)”的支持。
当您的应用程序绝对地需要OAuth2规范提供的所有功能时,可以选择Passport。
而且,如果您想快速入门,我们很高兴向您推荐Laravel Jetstream,这是启动新的Laravel应用程序的快速方法,该应用程序已经使用了我们首选的Laravel内置身份验证服务和Laravel Sanctum身份验证。
用以下一张图示例如何选择:
参考 http://laravel.p2hp.com/docs/8.x/authentication#ecosystem-overview
本文首发于lenix的博客,转载请注明出处 ,地址 https://blog.p2hp.com/archives/7482