2014-05-09 2 views
3

사용자가 json 웹 토큰을 사용하여 인증하는 symfony의 API 작업 중입니다. 여기에 제공 할 번들이 있습니다 : https://github.com/lexik/LexikJWTAuthenticationBundle.Symfony2의 Api를 통한 사용자 로그인

모든 것을 설정하는 방법에 대한 프로젝트 페이지의 문서가 있습니다. 이 번들은 vendor/symfony/symfony/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/FormLoginFactory.php에 정의 된 클래스를 기반으로하는 표준 "form_login"구성에 의존합니다.

번들은 인증을 위해 성공 및 실패 리스너를 제공하여 요청을 단락시키고 해당 응답 코드로 토큰 또는 오류가있는 JsonResponse를 반환합니다.

프로젝트 페이지의 샘플 구성을 사용하면 모든 것이 설명 된대로 작동합니다. 문제는 "form_login"과 같은 사전 정의 된 구성 팩토리가 쿠키 및 stateless API에서 필요하지 않은 기타 많은 동작을 설정한다는 것입니다.

보안 구성 요소는 symfony 책 보안에 정의 된 "stateless"구성 옵션을 정의합니다.

위의 문서에서는 "양식 로그인을 사용하는 경우 stateless를 true로 설정하더라도 Symfony2에서 쿠키가 생성됩니다."라고 명시되어 있습니다.

"form_login"에는 사용자가 인증되지 않은 경우 API에 필요하지 않은 로그인 페이지로 리디렉션하거나 전달할 수있는 많은 옵션이 있습니다.

또한 SwitchUserListener와 같이 사용할 수있는 많은 다른 기능은 서버가 html을 반환하는 전통적인 개발 모델에 매우 깊숙이 들어 있습니다.

이 번들을 사용하여 symfony 보안에 연결하고 다른 불필요한 검사를 비활성화하는 방법을 찾고 있습니다.

JWT에서는 실제로 로그인 할 필요가 없으며 토큰을 반환하는 인증 헤더를 사용하여 SSL을 통해 사용자 이름과 비밀번호를 보내는 인증되지 않은 경로가 필요합니다. 다른 보호 된 경로의 경우이 토큰을 제공하기 만하면됩니다. 이 부분은 이미 번들에 의해 제공되고 있습니다. 불필요한 심포니 코드를 호출하지 않고 초기 토큰을 얻으려면 제거 된 방법이 필요합니다.

방화벽을 우회하여 간단한 컨트롤러에 토큰을 얻기위한 코드를 구현 한이 예제는 http://miguel.ibero.me/en/post/2012-04-04/symfony-rest-api.html입니다.

방화벽을 사용하여 구현하는 더 좋은 방법을 찾고 있습니다. "form_login"과 같은 자체 보안 팩토리를 만들어야 할 것으로 판단됩니다.

http 기본 인증 방법을 사용하여 토큰을 얻을 수는 있지만 symfony가 사용자 이름/암호 창을 표시하지 않게 할 수 있습니다. 나는 인증자가 인증 된 헤더를 검사하고 성공 여부와 상관없이 단순히 메시지와 응답 코드를 반환하기를 원합니다.

어떤 제안에 감사드립니다.

답변