代码之家  ›  专栏  ›  技术社区  ›  Tiago Peres damanpreet singh

Laravel应用程序与第三方API交互以获得代币

  •  0
  • Tiago Peres damanpreet singh  · 技术社区  · 4 年前

    我有一个Laravel应用程序,它有一个GUI,用户可以根据MySQL数据库的数据登录。

    当用户登录时,服务器需要向第三方API的特定端点发出请求,以便获得令牌。此令牌来自该请求的响应,由于它是某种会话令牌,因此它会不时更新(这意味着如果抛出特定错误,则应调用检索令牌的同一请求)。

    在某些特定的视图/路由中,控制器中的相关逻辑意味着向该第三方API的一个或多个端点发出请求,其中先前获取的令牌位于主体或头部中,具体取决于端点。

    我最担心的是是否有人能够访问那个特定的令牌。如果发生这种情况,他们可能会与第三方API交互,造成不必要的混乱。因此,只要实现的过程非常安全(发生前一种情况的风险极低),即使页面或操作需要更长的时间,我也没问题。

    我应该以什么程序为目标?所需的答案将利用Laravel的“机制”,并指出这个令牌应该存储在哪里以及如何存储。

    0 回复  |  直到 4 年前
        1
  •  4
  •   Abilogos    4 年前

    在Web开发中,此场景通常使用CSRF令牌进行处理,以确保 正确的 用户已发送 请求 .

    根据你的问题,我假设:

    • 你的前端 向第三方Api发送请求。

    • 如果您的第三方库支持CSRF保护

    我的建议是使用 代理设计模式 :

    1. 前端在后端调用一条路由。
    2. 您的后端路由(扮演代理角色)请求第三方库 具有 session("third_party_session_token")
    3. 仅第三方响应您的后端。
    4. 后端返回对前端的响应。

    因此,通过这种方式, 第三个lib代币 只会留在后端。

    第三方Api代币存储在 用户会话空间 .

    如果您担心会话数据泄漏,可以使用laravel Encryption:

    session->put("third_party_api_token",Crypt::encryptString($api_token));
    

    并在您想查找第三方时检索它:

    $api_token = Crypt::decryptString(session()->get("third_party_api_token"));
    

    在加密任何东西之前,您必须使用以下命令生成密钥:

    php artisan key:generate