【问题标题】:Laravel authentication between different back-end project不同后端项目之间的 Laravel 身份验证
【发布时间】:2021-08-21 06:06:48
【问题描述】:

我有两个或多个后端 API(Laravel) 项目和一个前端 React JS 项目。从前端应用程序,我将调用所有后端 API 项目。

当用户登录时,验证会签入App 1(带有Laravel护照)并返回access_token

我想在从App 1App 2 调用API 时使用这些access_token。但是,主要问题是如何检查从App 2App 1 服务器的access_token 验证。

为了解决这个问题,我认为但不确定它是否正确,我可以在App 2 服务器中创建中间件并获取每个传入的access_token 并将其发送到App 1 以检查验证。如果返回true,用户可以访问,否则不能访问。

但是,我认为这种方式是不合适的,因为每个传入的请求都需要从App 2App 1检查access_token验证,它会减慢服务器和瓶颈问题。

我已经在 google 上搜索了很多帖子,但还没有找到最适合我的方法。我找到了一种 OAuth 服务器实现方式https://www.youtube.com/watch?v=K7RfBgoeg48,但我认为这种方式在我的项目结构中效果不佳,因为我有很多自定义项。

我也看过reddit上的讨论(https://www.reddit.com/r/laravel/comments/dqve4z/same_login_across_multiple_laravel_instances/),但是还是不太明白。

【问题讨论】:

    标签: laravel authentication laravel-passport


    【解决方案1】:

    你有几个选择:

    1. 我希望您有一个包含所有用户访问和刷新令牌的数据库 - 所以只需创建一个从 App2 后端服务器到包含您的访问和刷新令牌的数据库的数据库访问权限,然后直接在 App2 中通过新的数据库连接。

    2. 创建将检查从 App2 到 App1 的用户身份验证的中间件,但正如您正确指出的那样,这会导致额外的加载时间。

    3. 取决于您是否需要最终用户知道他正在连接到“另一台服务器” - 意思是 App2 - 您可以使用 Oauth2 授权 - https://www.youtube.com/watch?v=zUG6BHgJR9w

    选项 1. 对我来说似乎是最好的解决方案

    【讨论】:

    • 对于选项 1,我不清楚如何检查 App2 后端服务器到 App1 数据库(包括访问和刷新令牌)?
    • @Cloud 你不需要通过App1 => App2的通信检查数据库,你可以直接从App2访问数据库。这是您正在考虑的当前流程:App2 向 App1 请求授权,App1 使用访问和刷新令牌访问数据库,App1 向 App2 返回授权响应,App2 在成功验证后继续执行其余代码。我的建议是:将 App2 直接连接到 App1 正在使用的数据库,这样您就可以直接在数据库中查询访问令牌,而无需询问 App1。
    • 现在,我尝试按照您的指导检查令牌验证。在 App2 中,我创建了一个中间件,在该中间件中我连接到存在用户令牌的数据库。并从 App2 的传入请求中获取令牌,然后尝试检查令牌是否有效。主要问题是,我不知道如何验证acess_token,因为从App1 发出access_token 时,我使用laravel 护照。 Passport 会自动将“令牌 ID”保存在 oauth_access_tokens 表中,而不是令牌本身。我被困在这里验证令牌。
    • 1.在 App2 中安装 laravel 护照 2. 在 App2 中使用与在 App1 中相同的访问令牌验证方法
    猜你喜欢
    • 2018-02-25
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    相关资源
    最近更新 更多