簡體   English   中英

如何使用symfony2安全性實現自定義編碼

[英]How to implement custom encoding with symfony2 security

所以我遇到的問題如下:目前,我所擁有的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:試圖將這一切全部集成,所以我認為第一步是在我的用戶實體中實現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

我得到一個無限循環。 基本上我需要用戶能夠訪問/,/登錄,/注冊等,而無需登錄。幾乎每個其他頁面都需要經過身份驗證的用戶。 我還沒有得到自定義密碼編碼器,我認為這將是我的最后一步。 我想通過這個重定向循環問題。 有任何想法嗎?

你必須使用一個自定義編碼器,而不是一個自制的東西放在用戶權利之上......

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

然后,您可以使用本機symfony連接方法與自定義密碼編碼器。

不想過多細節,因為這是一個非常艱苦的轉換過程。 我唯一的建議是 - 從頭開始​​做這種事情,讓自己頭疼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM