如何使用有状态和无状态Laravel API验证

pcrecxhr  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(74)

我目前正在使用Laravel构建一个API,需要两种不同的身份验证类型,并且希望在实现所有内容之前能够正确考虑天气。
API将有一个React应用程序,该应用程序发出的请求将与API托管在同一个顶级域上。我需要为此使用状态身份验证,因为它将链接到生成流PDF的路由,其中用户必须进行身份验证。一个例子是他们在React应用程序中登录,在React应用程序中做一些事情,向API发出请求,然后在最后会有一个指向PDF的链接。这个PDF将包含用户-特定的数据,因此我需要在生成PDF时对用户进行身份验证。我的猜测是,我需要有状态的身份验证,因为我不能使用链接发送Authorization头?
API还将具有路由组,该路由组将由必须使用API令牌保护的不同域上的外部应用使用。有状态身份验证最好不对这些路由起作用。
我应该如何创建此设置?Laravel Sanctum是否足以使用SPA Auth作为主要路由,并使用Token Auth作为其他路由?我可以阻止SPA Auth在其他路由上工作吗?我做了一个快速设置测试,并没有遇到一个问题,让我的问题,这将工作或不.这个问题是,当我登录使用 Postman 在我的电脑上,然后要求我的同事,在他的PC上使用Postman提出请求Sanctum表现得好像他已经登录,并且它就像我们为当前登录的用户共享会话数据一样?
这是我这边的配置问题,还是它应该工作的方式,而这不是我实现它的正确方式?
提前感谢!

omtl5h9j

omtl5h9j1#

状态认证

对于您的React应用程序,您可以使用Laravel Sanctum的状态认证。这将使您的React使用cookie进行认证,当您需要访问生成流式PDF的路由时。

令牌认证

外部应用可以使用基于令牌的身份验证,这是Sanctum提供的另一项功能。对于需要基于令牌的身份验证的路由,请使用auth:API中间件。外部应用将在其请求中发送Authorization标头。
您描述的不同Postman客户端共享会话数据的问题似乎不寻常。Sanctum的有状态会话应绑定到特定的浏览器或客户端会话,因此多个Postman客户端不应共享同一会话,除非它们使用相同的Cookie或会话数据。
我认为有了正确的配置,Laravel Sanctum应该适合你的需求。阅读它的文档并测试每一个,以确保你的实现正确工作。
最后,如果你觉得Sanctum可能不能完全满足你的要求,你可以考虑其他Laravel身份验证包,比如Passport,但是对于大多数SPA和简单的API场景,Sanctum已经足够了。

相关问题