Laravel Passport vs JWT vs Oauth2 vs Auth0

Lui*_*s L 19 oauth-2.0 jwt laravel auth0 laravel-passport

关于Laravel中API身份验证类型的困惑?

我目前正在学习如何在Laravel中创建一个API,我发现自己陷入了这个令人困惑的概念.经过几天的研究和实践,我终于可以理解这个概念,制作一个迷你指南.我不得不查看很多单独的网页,所以我会尽力解释它们之间的关系.

Lui*_*s L 67

这些概念是什么?

  • Passport是一个官方的Laravel软件包,它实现了Oauth2和JWT.
  • Auth0是一种身份验证和授权服务.这是api auth的"一体化"解决方案.它默认实现JWT,可以实现Oauth2以及许多其他协议.
  • OAuth2是一个授权框架或协议,它允许应用程序(您要构建的应用程序)对Facebook,GitHub等用户帐户进行有限访问...想象一下,您的应用程序变得足够大,可以提供"登录"使用APP NAME HERE"或向其他第三方应用程序提供对您的用户帐户的有限访问权限.使用Oauth2,您可以在许多其他方面实现这一目标.
  • JWT是一种令牌格式.换句话说,它是如何安排数据来创建令牌的.另一种令牌格式是SWT.

换一种说法:

  • Passport实现 - > Oauth2和JWT.
  • Auth0可以实现 - > Oauth2或许多其他协议,如LDAP,OPEN ID等.
  • Oauth2可以实现 - > JWT或其他令牌格式,如SWT.

你应该用什么?

对于初学者来说,创建与Laravel兼容的自己的Oauth2实现会很疯狂.Oauth2出局.我们所有的重新考虑是三种包装选择.护照,tymondesigns/jwt-authAuth0.

JWT(tymondesigns/jwt-auth包)可以创建一个电子邮件和密码验证.但是,如果您使用Passport作为基本电子邮件和密码身份验证,则您不必担心"Oauth2实现"会影响应用程序的性能(这不是很多).当所有那些令人生畏的迁移表和路由都是由Passport生成时,差异就出现了,但通过一些练习,您将会理解它们.Auth0 似乎设置得很快,但在某些用例中它可能过于夸张,除了不感觉使用社区laravel包的安全性.

真正的比赛是在Auth0和Passport之间进行的.与护照相比,Auth0是瑞士军刀.你可以直接使用一个非常好的仪表板,这将允许你管理你的api的所有方面.从第三方身份验证添加可以使用该API的更多应用程序(移动,Web,桌面).护照可以与更精致的刀相比.它是专门为Laravel构建的,从长远来看,您可以实现自己的漂亮和自定义仪表板来管理您的api客户端.

结论

我认为真正的选择必须在Passport和Auth0之间.如果你想在Laravel建立一个api,或者你将更多地进入api世界而不是Laravel,这取决于你.就我而言,我更喜欢Passport而不是Auth0,最后是JWT.原因是:

  • 我喜欢使用官方的laravel套餐.
  • 除了添加到我的项目的路线和表格,它不会受到影响.
  • 如果我从最基本的API auth开始并想要扩展,那将更容易.

还在谈论最后一点,有些人可能会说Auth0社区很小.它基本上是.但它也有一个很棒的客户支持人员.


Passport和Oauth2的教程

Laravel和Oauth2 Docs对令牌的解释可能有点困难.这是Passport(因此Oauth2)不同类型的令牌及其用例的一个很好的解释.由于我无法弄清楚教程的"路线"部分,我不推荐教程部分.

这是一个Good Passport视频教程,它也使用PostMan Chrome应用程序进行API调用.对于那些不熟悉这种API的人来说,像PostMan这样的应用程序将使您的工作比使用"curl"Linux/Mac命令更容易.您可以观看完整系列或仅观看Passport部分.目前我被困在视频4上.这是我的目前尚未解决 Stack Overflow问题.

资源

许多资源都在文章的上面展开,但我也有一些资源.

  • 好帖子!关键是,对于大多数登录功能,您将成为oauth客户端.如果您想成为oauth服务器(如linkedin,github,google)并提供可以使用护照完成的令牌,但它与构建使用这些服务的简单登录(即oauth客户端)不同 (3认同)
  • 坦白说吧。大多数应用程序不需要Laravel Passport。他们将与Tymon JWT完美配合。他们想要的只是带有刷新令牌的无状态电子邮件和密码身份验证。仅将Laravel Passport用于这是一个致命的挑战。如果您有一个类似于Facebook的应用程序,它可以为用户的客户提供具有权限的API来访问其数据,那么Laravel Passport就很有意义。它涉及3个方。用户,客户端和后端。大多数应用程序包含两个部分。用户和后端。我的两分钱。 (3认同)