当前位置: 首页 > 知识库问答 >
问题:

Symfony 3.3,身份验证,加密,不良凭据

方昊阳
2023-03-14

我正在开发一个Symfony 3.3 web应用程序,其中包括一些捆绑包。

我试图定义一种在数据库中注册管理员用户的方法,如下所示。我可以在数据库中创建该用户,但之后我无法以该用户的身份登录:我总是获得错误的凭据。虽然我知道事情可以安排得更好,但我想了解我没有看到的东西。

因此,我有一个AdminBundle,其中我定义了一个用户类:

<?php

namespace myApp\AdminBundle\Entity;


use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;


/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    public function __construct()
    {
        parent::__construct();

    }
}
?>

和登记册行动

    /**
    * register main user/admin
    *
    * @Route("/register/{nameuser}", name="Jus_Admin_register")
    * @Method("GET")
    * @Template()
    */
    public function registerAction($nameuser)
        {

    $user = new User();
    $user->setUsername($nameuser);
    $user->setEmail('aaa@aaa.aaa');
    $plainPassword = 'pw';
    $encoder = $this->get('security.encoder_factory')->getEncoder($user);
    $encoded = $encoder->encodePassword($user, $plainPassword);

    $user->setPassword($encoded);
    $user->setEnabled(TRUE);
    $user->setSuperAdmin(TRUE);
    $userManager = $this->container->get('fos_user.user_manager');
    $userManager->updateUser($user);

     return $this->render('myAppAdminBundle:Admin:login.html.twig');      
}

我的security.yml有:

security:
    encoders:
        myApp\AdminBundle\Entity\User:
            algorithm: bcrypt
            cost: 10
            iterations: 1

   role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

   providers:
       our_db_provider:
            entity:
               class: myApp\AdminBundle\Entity\User
               property: username
....
   firewalls:
       admin_area:
           pattern:   ^/myApp/Admin
           anonymous: ~
           form_login:
              login_path: /myApp/Admin/login
              check_path: /myApp/Admin/login_check
           logout:
              path:   /myApp/Admin/logout
              target: /myApp/Admin/admin
           http_basic:
              realm: "Admin reserved"

           context: primary_auth

我的config.yml有(事实上,我不确定我是否需要以下内容):

fos_user:
   db_driver: orm # other valid values are 'mongodb' and 'couchdb'
   firewall_name: admin_area
   user_class: myApp\AdminBundle\Entity\User\
   from_email:
       address: "%mailer_user%"
       sender_name: "%mailer_user%"

如果我调用http://localhost/myApp/Admin/register/admin,则将以下记录插入表fos_user:

--
-- Dumping data for table `fos_user`
--

INSERT INTO `fos_user` (`id`, `username`, `username_canonical`, `email`, `email_canonical`, `enabled`, `salt`, `password`, `last_login`, `confirmation_token`, `password_requested_at`, `roles`) VALUES
(1, 'admin', 'admin', 'aaa@aaa.aaa', 'aaa@aaa.aaa', 1, NULL, '$2y........yq', NULL, NULL, NULL, 'a:1:{i:0;s:16:\"ROLE_SUPER_ADMIN\";}');

但是,我无法登录。日志说:

[2017-08-......]安全。INFO:身份验证请求失败。{"异常":"[对象](Symfony\Component\Security\Core\Exc0019\BadCre的异常(代码: 0):错误的凭据。at/....../供应商/Symfony/Symfony/src/Symfony/Component/Security/Core/身份验证/提供商/用户身份验证Provider.php:91,Symfony\Component\Security\Core\Excsion\BadCre的异常(代码:0):提供的密码是无效的。at/....../供应商/Symfony/Symfony/src/Symfony/组件/安全/核心/身份验证/提供商/道身份验证Provider.php:67 )"} []

谢谢,谢谢你的帮助

另外,如果我使用内存中的安全提供商,我的应用程序运行得很好


共有1个答案

郝昊天
2023-03-14

不需要手动散列密码。更新时由用户管理器进行散列。只需设置普通密码。

$user = new User();
...
$user->setPlainPassword('pw');
...
$userManager->updateUser($user);

如果要手动对其进行散列,请修复encodePasswordcall。它接受两个参数:普通密码和salt

$encoded = $encoder->encodePassword('pw', $user->getSalt());

https://github.com/symfony/security-core/blob/master/Encoder/PasswordEncoderInterface.php#L29

 类似资料:
  • 我对社交网络分析和twitter api是新手。我想收集关于特定主题的tweets。所以我写了下面的代码 在我的程序中,我需要在哪里提供凭据 谢谢

  • 问题内容: 实用程序类中有一个静态方法,该方法将从URL下载文件。已经设置了身份验证器,以便如果需要用户名和密码,则可以检索凭据。问题是,只要凭据有效,来自第一个成功连接的凭据将用于每个连接后缀。这是一个问题,因为我们的代码是多用户的,并且由于没有为每个连接检查凭据,所以没有适当凭据的用户可能会下载文件。 这是我们正在使用的代码 第一次下载文件时,我只从getPasswordAuthenticat

  • 问题内容: 我对HTTPS和HTTP身份验证凭据有疑问。 假设我使用HTTP身份验证来保护URL: 然后,我通过HTTPS从远程系统访问该URL,并在URL中传递凭据: https://gooduser:secretpassword@www.example.com/webcallback?foo=bar 用户名和密码会自动进行SSL加密吗?GET和POST是否一样?我很难用此信息来找到可靠的来源。

  • 我试图在一个反应式Spring Boot应用程序中配置一个Spring Security性,该应用程序具有一个Vuejs前端,在未经身份验证时将用户重定向到外部OpenID提供程序(用于身份验证)。在用户通过OpenID提供程序进行身份验证并重定向回应用程序(前端)后,将根据OpenID提供程序的响应创建用户名密码身份验证令牌(身份验证),并手动进行身份验证。 但是,在执行此操作时,应用程序似乎无

  • 我用Apache Mina SSHD设置了一个SSH服务器作为SFTP服务器。使用口令验证器或公钥验证器时,连接加密的方式有什么不同吗?或者它们都是关于身份验证的,我想使用哪一个由我决定? 问候语

  • 我已经开始开发一个由Google的Firebase服务提供支持的应用程序。我很好奇数据传输在Auth和数据库服务中是否安全。如果没有,我是否可以阅读任何材料来源以实现加密? 非常感谢。