gpt4 book ai didi

php - 如何在 Symfony 中配置基本身份验证以允许空密码?

转载 作者:行者123 更新时间:2023-12-04 15:42:06 29 4
gpt4 key购买 nike

我正在用 PHP/Symfony 4.0 编写一个 REST API 端点,我想使用基本身份验证,使用密码为空的内存用户。当我尝试使用这些凭据调用端点时,我收到一个 BadCredentialsException 提示“提供的密码不能为空”。

看来异常是由 DaoAuthenticationProvider 抛出的。

如何在 Symfony 中配置基本身份验证以允许空密码?

上下文:我正在为一个简单端点设置基本身份验证,该端点将用作集成字段的 Prismic 自定义 API(参见 https://user-guides.prismic.io/en/articles/1401183-connect-to-a-custom-api)。 Prismic 对此支持基本身份验证,您可以在其中输入将用作用户名的 key ,密码将留空。

我正在用 PHP/Symfony 4.0 写这篇文章,我一直在关注 https://symfony.com/doc/current/security.html 上的文档。 .

我的 config/packages/security.yaml 文件是:

security:
firewalls:
secured_area:
pattern: ^/api/my-endpoint
http_basic: ~
security: true
main:
security: false

providers:
in_memory:
memory:
users:
test:
password: ''

encoders:
Symfony\Component\Security\Core\User\User: plaintext

我日志中的完整错误信息是:

Basic authentication failed for user. {"username":"test","exception":"[object] (Symfony\Component\Security\Core\Exception\BadCredentialsException(code: 0): Bad credentials. at my-project\vendor\symfony\security\Core\Authentication\Provider\UserAuthenticationProvider.php:84, Symfony\Component\Security\Core\Exception\BadCredentialsException(code: 0): The presented password cannot be empty. at my-project\vendor\symfony\security\Core\Authentication\Provider\DaoAuthenticationProvider.php:54)"} []

最佳答案

如果您真的不想进行适当的身份验证,然后经过身份验证的用户将使用 API key 调用远程端点,并以更“肮脏”的方式解决任务,那么您可以做什么是:

  • 创建您自己的 AuthenticationProvider,它将扩展原始的 https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Security/Core/Authentication/Provider/DaoAuthenticationProvider.php

  • 覆盖 checkAuthentication 方法,您将拥有与原始代码相同的代码,但不检查空密码(可能还有 else 语句中相关的所有其他内容)

  • 覆盖service definition指向您自己创建的 AuthenticationProvider

     <service id="security.authentication.provider.dao" class="XXXX Your class here XXXX" abstract="true">
    <argument /> <!-- User Provider -->
    <argument /> <!-- User Checker -->
    <argument /> <!-- Provider-shared Key -->
    <argument type="service" id="security.encoder_factory" />
    <argument>%security.authentication.hide_user_not_found%</argument>
    </service>
  • 清空缓存试试

覆盖服务:

services:
...
...
security.authentication.provider.dao:
alias: MyProject\Service\Security\OverriddenDaoAuthenticationProvider
public: true

在你的OverriddenDaoAuthenticationProvider类中记得调用原始构造函数来传递参数:

public function __construct(UserProviderInterface $userProvider, UserCheckerInterface $userChecker, string $providerKey, EncoderFactoryInterface $encoderFactory, bool $hideUserNotFoundExceptions = true)
{
parent::__construct($userProvider, $userChecker, $providerKey, $encoderFactory, $hideUserNotFoundExceptions);
}

关于php - 如何在 Symfony 中配置基本身份验证以允许空密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57507975/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com