2013-02-20 2 views
2

내 구성에 대해 웹에서 솔루션을 찾았지만 필자의 요구 사항을 만족하는 제품을 찾을 수 없습니다. 지금까지 3 일 동안이 작업을 해왔으며 제대로 작동하지 않을 수 있습니다. 이해하지 못했던 몇 가지 사항이 있다고 확신합니다.UserProvider가 필요없는 사용자 인증

브랜치 2.1에서 심포니 애플리케이션을 개발 중입니다.

이렇게 짧게하십시오. 나는 인증을 위해 사용할 웹 서비스를 가지고있다.

내가 구현하려는 흐름이다

  1. 사용자 자격 증명을
  2. 이러한 자격 증명을 제출 (사용자 이름이 & 암호 필요) 내 웹 서비스로 전송됩니다
  3. 사용자 이름/암호가 올바른 경우 webservice는 사용자 이름, 역할 및 일부 다른 것들을 가진 배열을 제공하지만 암호는 제공합니다. (자격 증명이 정확하지 않으면 한 필드가있는 배열이 반환됩니다)
  4. webservice에서 "큰"배열을 제공하는 즉시 사용자를 인증 된 것으로 간주해야합니다.
  5. 반환되는 역할의 함수에서 Symfony 보안 구성 요소가 해당 권한을 사용자에게 제공하기를 원합니다.
  6. 각 페이지를 열 때마다 webservice를 호출하는 것을 피하고 싶습니다.

가 확인이 워크 플로를 들어,이 사용 심포니을 할 수 있다면 나도 몰라는 더 안전하지 않는 것,하지만 난이 웹 서비스를 사용하는 다른 방법을 볼 수 없습니다.

마치려면 원격 서비스에서 인증되기 때문에 UserProvider가 필요하지 않습니다. 하지만 분명히 Symfony 컴포넌트는 사용자 제공자를 필요로합니다 (유형은 중요하지 않습니다).

나는 사전에

편집을 주셔서 감사합니다 : 그것은 간단하게하기 위해서는 (UserProviderInterface를 구현)에 UserProvider 클래스() 함수 loadUserByUsername 단지 변수 $ 이름보다 더 많은 것을 전달할 수 있습니까? 사용자 개체를 검색하려면 사용자 이름과 함께 사용자를 전달해야합니다.

답변

3

AuthenticationProvider는 일반적으로 UserProvider.loadUserByUsername을 호출합니다. 귀하의 경우에는 전화 할 필요가 없습니다. 인증 메소드는 사용자를 생성하고 토큰을 되돌려 보낼 수 있습니다.

인증 된 토큰은 결국 세션에서 종료됩니다.

문제는 기본적으로 다음 요청이 들어 오면 시스템에서 세션에서 토큰/사용자를 검색 한 다음 기본적으로 loadUserByUsername을 사용하여 사용자를 다시로드하는 UserProvider.refreshUser ($ user)를 호출한다는 것입니다. .

고유 한 사용자 공급자를 만들고 refreshUser에서 동일한 사용자를 반환해야합니다. 인터페이스 만 만족 시키려면 loadUserByUsername이 필요하지만 절대로 호출해서는 안됩니다.

웹 서비스에서 사용자를 주기적으로 새로 고치려면 세션에서 토큰을로드하고 자체 동작을 재정의하기 위해 자체 수신기를 추가해야합니다.