2011-09-06 8 views
20

Facebook, Twitter 또는 Google로 로그인 할 수있는 app/API를 제작 중입니다. 해당 사용자가 동일한 계정을 사용하여 API에 로그인 할 수 있도록하는 가장 좋은 방법은 무엇인가 궁금합니다.Facebook OAuth로 REST API 보안하기

  1. 내가 가진 몇 가지 아이디어는 모든 요청에 ​​대해 인증 토큰/쿠키를 API에 전달하고 백엔드에서 인증하는 데 사용합니다.
  2. 내 OAuth 설정을 실행하고 사용자가 내 OAuth 토큰을 얻고 그 이후부터 사용하도록 백엔드로 한 번 인증하도록합니다.
+0

사용자는 Facebook, Twitter 및 Google로 로그인 할 수있는 옵션이 있음을 언급했습니다. 오픈 아이디 공급자 중 한 명과 강제로 로그인합니까? –

+0

이것은 정확하게 내 문제이며 해결책 1은 정말 좋은 것처럼 보이지만 API가 요청을 인증하는 데 인증 토큰을 사용하는 방식을 이해하지 못합니다. 설명해 주시겠습니까? – s0nica

답변

1

나는 똑같은 일을하고 있으며 내 해결책은이 각각의 API에서 얻은 이메일 주소를 일치시키는 것입니다.

Facebook의 경우 최종 사용자로부터 특별 허가를 받아야 거기에 등록 된 이메일 주소를 가져올 수 있습니다. 첫 번째 oauth 요청에 &scope=email을 추가하여이 작업을 수행합니다.

단점은 최종 사용자로부터이 권한을 얻어야하고 거부 될 수 있다는 것입니다. 또 다른 단점은 사용자가 Google, Facebook 및 Twitter에 대해 동일한 이메일 주소를 사용해야한다는 것입니다.

장점은 사용자 기록이 자동으로 병합되므로 Google을 통해 처음 로그인하고 Facebook을 통해 두 번째로 로그인하면 사용자가 모든 데이터에 직접 액세스 할 수 있다는 것입니다.

또 다른 방법은 이미 Facebook을 통해 로그인 한 상태에서 Google에 로그인하여 수동으로 데이터를 병합하는 것입니다. 그런 다음 둘 다 서로 다른 이메일 주소를 사용하더라도 동일한 사용자라고 결론을 내릴 수 있습니다. 그러나 이것은 여전히 ​​두 계정의 앱 사용자 데이터를 병합해야하므로 더 지루한 접근 방식입니다.

+0

사용자의 전자 메일 주소를 가져 오는 것이 어떤 방식 으로든 인증을 용이하게합니까? (API 사용자가 원하는 이메일 주소를 스푸핑 할 수 있다면 보안이 전혀 없음) –

+0

이메일 주소 자체를받지 못하지만 Facebook이나 Google에서 토큰을받을 수 있다는 사실. 이는 사용자가 해당 계정에 대해 성공적으로 인증되었음을 의미합니다. –

+0

비누 xml의 구문 분석 방법 –

0

첫 번째 해결 방법은 내가하는 방법과 같습니다. 모든 나머지 서비스는 stateless이므로 액세스 토큰은 헤더에 있으며 모든 요청에 ​​대해 봄 보안 인증 필터로 구문 분석됩니다. 나는 spring-security-oauth 플러그인으로 grails 서버를 사용한다. 또한 브라우저 기반 액세스를 위해 세션 쿠키를 사용할 수있는 웹 사이트도 운영합니다.