【问题标题】:Unit testing endpoint protected by In-memory Authentication Engine受内存身份验证引擎保护的单元测试端点
【发布时间】:2015-11-23 15:19:34
【问题描述】:

我在 ADmad/cakephp-jwt-auth 提供的 CakePHP3 中使用无状态身份验证。我将 Auth 组件配置为使用内存存储。

在我设置的 IntegrationTestCase 中

$this->session([
        'Auth' => [
            'User' => [
                'id' => 100,
                ...
            ]
        ]
]);

但测试总是失败,因为 auth 组件没有在会话中搜索用户数据。使用内存存储时有没有办法绕过身份验证?

【问题讨论】:

    标签: cakephp authentication cakephp-3.0


    【解决方案1】:

    它不在会话中搜索,因为 JWT 使用会话。这就是基于令牌的stateless 身份验证系统的全部意义所在。 here 也有解释。

    您需要随请求一起获取并发送令牌。

    我建议您在实现它们之前了解它们的工作原理,尤其是在涉及身份验证和授权或其他与安全相关的主题时。否则,这可能会导致安全漏洞和时髦的错误。

    【讨论】:

    • 重点是bo绕过授权仅用于单元测试。
    【解决方案2】:

    我知道有一个标记为已接受的答案,但我认为创建该问题的人正在谈论如何在使用基于 JWT 的身份验证时绕过身份验证,所以这是我在 ADmad 自己的测试中发现的答案:

    <?php
        $token = JWT::encode(['sub' => 1], Security::salt());
    
        $this->configRequest([
            'headers' => [
                'Authorization' => 'Bearer ' . $token
            ]
        ]);
    ?>
    

    基本上,如果您在每次请求之前都这样做,您可以绕过身份验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-22
      • 2014-11-20
      • 2012-01-27
      • 2019-09-07
      • 2018-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多