【问题标题】:How to implement authentication on a REST architecture with Parse如何使用 Parse 在 REST 架构上实现身份验证
【发布时间】:2021-02-08 04:02:14
【问题描述】:

我目前正在重做一个使用 PHP Parse SDK 的旧版 Web 应用程序,并且我处于登录身份验证部分。在旧应用程序中,我们在执行 ParseUser::signIn()ParseUser::currentUser() 时使用 $ _SESSION 和 ParseToken 来检查您是否有一个带有有效令牌的会话,但是新应用程序是使用 REST 架构制作的,其中一个 REST 概念是服务器不能保持状态,即无状态,在这种情况下,客户端必须发送必要的数据。

在搜索互联网和论坛时,我看到开发人员通常使用 JWT 进行身份验证,客户端会请求服务器的路由,服务器会返回一个令牌,并通过该令牌进行身份验证.

我什至使用Firebase / jwt-php 实现了一些东西,其中客户端 [邮递员] 通过正文 [username, password] 请求路由 /login 发送,如果成功,则返回令牌用于安全路由请求。

注意:代码尽可能简单,没有验证和清理只是为了展示示例。

行动/login


$username = $request->getParsedBody()['username'];
$password = $request->getParsedBody()['password'];

$userAuthenticated = ParseUser::logIn($username, $password);

$payload = [
    'data' => $userAuthenticated,
    'exp'  => time() + 3600
];

$token = JWT::encode($payload, $_ENV['JWT_SECRET_KEY']);

echo json_encode(['token' => $token]);

并且受保护的路由有一个middleware,它会检查 time has expired,如果发生这种情况,就会启动一个带有401代码的异常。

到目前为止一切顺利,身份验证工作,问题我不知道这样做是否正确,因为我需要给一个ParseUser::logIn(),只是为了在数据库中生成一个会话而我没有甚至在这个会话中使用它来做一些身份验证,除了银行中的操作,因为从我在文档中看到的,如果数据库中没有有效的会话,应用程序将返回invalid session token error,并且在进行请求另一条路由ParseUser::currentUser()返回null,这可能是未来的问题。

有谁知道如何为 PHP 制作的 REST 应用程序实现身份验证?感谢您的帮助!

【问题讨论】:

    标签: php parse-platform jwt


    【解决方案1】:

    我相信最简单的方法是将默认会话存储(使用 $_SESSION)替换为将会话存储在例如 Redis 中的其他东西。参考:https://docs.parseplatform.org/php/guide/#session-storage-interface

    但你的做法也应该有效。您只需确保每次收到请求时,您都会解码 JWT,从那里获取 Parse Session 令牌,并使用 ParseUser::become 设置当前用户:https://docs.parseplatform.org/php/guide/#setting-the-current-user

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-31
      • 2012-07-15
      • 1970-01-01
      • 2021-04-26
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 2013-06-29
      相关资源
      最近更新 更多