【问题标题】: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 也有解释。
您需要随请求一起获取并发送令牌。
我建议您在实现它们之前了解它们的工作原理,尤其是在涉及身份验证和授权或其他与安全相关的主题时。否则,这可能会导致安全漏洞和时髦的错误。
【解决方案2】:
我知道有一个标记为已接受的答案,但我认为创建该问题的人正在谈论如何在使用基于 JWT 的身份验证时绕过身份验证,所以这是我在 ADmad 自己的测试中发现的答案:
<?php
$token = JWT::encode(['sub' => 1], Security::salt());
$this->configRequest([
'headers' => [
'Authorization' => 'Bearer ' . $token
]
]);
?>
基本上,如果您在每次请求之前都这样做,您可以绕过身份验证。