【问题标题】:How to implement custom encoding with symfony2 security如何使用 symfony2 安全性实现自定义编码
【发布时间】:2013-12-05 00:37:14
【问题描述】:

所以我遇到的问题如下: 目前,我拥有的 symfony2 项目有一个用户实体,它有自己的方法来加密数据库中的密码:

private function blowfishCrypt($password,$cost)
{
    $chars='./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    $salt=sprintf('$2a$%02d$',$cost);
    //Create a 22 character salt -edit- 2013.01.15 - replaced rand with mt_rand
    mt_srand();
    for($i=0;$i<22;$i++) $salt.=$chars[mt_rand(0,63)];
    return crypt($password,$salt);
}

public function encryptPassword($string)
{
    $this->setEncryptedPassword($this->blowfishCrypt($string, 10));
}

登录方法基本上只是像这样检查输入的密码:

if (crypt($userPost['password'], $user->getEncryptedPassword()) != $user->getEncryptedPassword())

然后它设置会话变量authTokenuserId

但由于在整个应用程序调用中必须进行以确保在会话中设置了 userId 和 authToken - 因此我们希望经过身份验证的用户只能访问的任何操作都必须进行检查,例如:

if (!authToken) { return 401 } //not exactly, but you get the idea.

我清理所有这些检查的临时解决方案是创建一个我的所有控制器都可以实现的接口,该接口将在控制器操作之前运行一些代码,并且可以在用户未登录时返回重定向。我想要什么要做的就是重写所有这些,以便我可以利用 symfony2 的安全层。我怎样才能做到这一点?

编辑:我有一个单独的门户从相同的代码库运行,它为用户使用完全不同的表(如管理门户)。假设上述是可能的,这是否可能与 symfony2 的安全功能?

编辑 2:试图将这一切整合起来,所以我认为的第一步是在我的 User 实体中实现 UserInterface。我已经这样做了,这是我的 security.yml:

security:
  firewalls:
    secured_area:
      pattern: ^/
      anonymous: ~
      form_login:
        login_path: login
        check_path: login_check
  access_control:
    - { path: ^/., roles: IS_AUTHENTICATED_FULLY }
    - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/login.*, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/login_check.*, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/signup.*, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/_wdt, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/_profiler, role: IS_AUTHENTICATED_ANONYMOUSLY }
  providers:
    main:
      entity:
        class: BundleNamespace\Entity\User
        property: email
  encoders:
    Symfony\Component\Security\Core\User\User: plaintext

我得到一个无限循环。基本上,我需要用户无需登录即可访问 /、/login、/signup 等。几乎所有其他页面都需要经过身份验证的用户。我还没有使用自定义密码编码器,我想这将是我的最后一步。我想解决这个重定向循环问题。有什么想法吗?

【问题讨论】:

  • 我应该注意到盐没有存储在用户表中,至少,没有存储在单独的列中。
  • 有人吗?我仍然在尝试实现这一点时遇到问题。我已经让我的用户类实现了安全 UserInterface,但是我现有的登录方法和注销方法很难集成到这个系统中。

标签: security symfony authentication doctrine-orm blowfish


【解决方案1】:

您必须使用自定义编码器,而不是放在用户实体之上的自制东西......

看看:https://stackoverflow.com/a/8175657/2858398

然后你可以使用原生 symfony 连接方法和你的自定义密码编码器。

【讨论】:

    【解决方案2】:

    不想详细说明,因为这是一个非常艰苦的转换过程。我唯一的建议是 - 从头开始​​做这种事情,以免让自己头疼。

    【讨论】:

      猜你喜欢
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多