2013-12-09 2 views
0

내 응용 프로그램에 대한 보안 인증/권한 부여 모델을 만드는 방법에 대한 조언을 찾고 있습니다. 나는 이것을 CakePHP에 쓰고 있지만이 모델을 어떤 응용 프로그램으로도 사용하고 싶습니다. 내 모델에 대한 의견을 듣고 더 나은 모델을 만들 수 있다면 정말 고맙겠습니다.안전한 인증/권한 부여 모델 만들기

$getUser= $this->Session->read('get_logged_user'); 
if($getUser == null){ 
      //no credentials, redirect 
      $this->render('../Elements/User/login'); 

     }else{ 
      if($getUser->isAuthenticated==false){ 
       //not authenticated 
       $this->render('../Elements/User/login'); 
      }else{ 
       //its ok, show the page. if needs to check roles, iterate of the roles array 
     } 
     } 

기본적으로, 내가 올바른 세션을 사용할 수 있는지 확인하십시오

내가 보호하려는 각보기는 그것의 컨트롤러에 다음 코드를 가지고 : 이것은 내가 가지고있는 것입니다. 그렇지 않은 경우 로그인하지 않았으므로 로그인 페이지로 리디렉션됩니다. 그렇다면 승인을 확인하십시오. 내 세션은 성/이름, 사용자 이름, 역할 배열 및 isAuthenticated 부울로 구성된 클래스입니다. 사용자가 내 앱에 로그인하면이 개체가 생성되어 세션에 추가됩니다. 클래스는 데이터베이스에 대해 인증하고 사용자의 모든 필수 정보 (이름, 역할 등)를 취소합니다. 역할은 사용자가 볼 수 있고 볼 수없는 것을 결정하기 위해 앱에서 추가로 사용할 수 있습니다. 사용자가 "로그 아웃"버튼을 클릭하면이 세션 객체가 파괴됩니다.

이 방법은 안전한가요? 토큰이나 다른 것을 사용해야합니까? 더 많은 코드가 필요한 경우 알려 주시면 게시 할 수 있습니다. cakePhp에는 보안 플러그인이 있지만 처음부터 내 자신을 만들 것이라고 알고 있습니다.

감사합니다.

+2

조언 - 처음부터 나만의 것을 만들지 마세요. 인증은 심각한 비즈니스입니다. 전문가가 군중을 끌어들이도록하십시오. 혼란스러워하는 소리는 들리지 않지만,이 간단한 결정을 스스로 할 수 없다면, 아직 자신의 것을 결정하기에 충분하지 않습니다. 그냥 배울 좋은 사람들을 공부하십시오. – jmadsen

+0

안녕하세요, 귀하의 우려에 감사드립니다하지만 내 자신의 지식을 위해 이것을 쓰고 있어요. 안전한 앱을 만드는 방법에 대해 자세히 배우고 내 모델을 만드는 것이 통조림 솔루션을 사용하는 것이 더 유용 할 것입니다. – jason

+0

듣기 좋은데 - 가장 좋은 방법은 여러 가지 기존 모델을 연구하고 왜 그들이 선택한 것을했는지 이해하는 것입니다. 인터넷에서 무작위 조언은 매우 신뢰할 수 없을 것입니다 – jmadsen

답변

0

그래서 ... 당신은 바퀴를 재발 명하고 싶습니까? 예, 계속하십시오. 나는 너에게 머리를 말하고 싶다.

먼저, 기본적으로 시작해 보겠습니다. 나는 모든 액션에서 그 코드를 복사/붙여 넣기하지 않을 것이고 대신 이것을 AppController에 넣을 것이다.

public function beforeFilter() { //called in all your controller actions 
    parent::beforeFilter(); 
    $mySession = $this->Session->read('yourSession'); 
    if ($mySession === null) { 
     $this->render('something'); 
     return; 
    } 
    if (!$mySession->isAuthenticated()) { 
     $this->render('login'); 
     return; 
    } 
    //the rest of your logic 
} 

이 접근

아주 기본적인, 당신은 당신이 다른 응용 프로그램에서 사용할 수 있습니다, 또는 당신도이 경우에 가장 좋은 솔루션입니다 플러그인을 만들 수 있도록 부품이 포장 할 수 있습니다.

Auth의 내부를 입력하지 않으려면 CakeDC에서 수행 한 Users Plugin을 살펴보십시오.

또 다른 조언 (인증 논리와 관련 없음)은 coding conventions을 처리하십시오. 코드를 읽고 이해하기가 더 쉽습니다. 또한 일찍 돌아가서 조건부를 중첩시키지 않도록하십시오.

귀하의 학습 과정에서 기원합니다.

+0

좋아요! 의견을 보내 주셔서 감사합니다. – jason