2012-10-17 3 views
2

Facebook의 서버 쪽 로그인 프로세스에서 그 내용이 the server should provide a 'state' variable during the request to Facebook입니다. Facebook이 로그인 콜백 페이지로 돌아가서 우리 서버가 확인할 수 있도록하는 CSRF 토큰처럼 작동합니다.Facebook 로그인에 상태 변수가 필요한 이유

그러나 이것이 왜 필요한지 잘 모르겠습니다. 가짜 로그인 요청을 받으면 로그인 요청의 ?code=을 사용하여 Facebook에서 access_token을 가져와야합니다. 가짜 요청은 올바른 code을 가지지 않으므로 올바르게 작동하지 않습니다.

또한 사용자는 Facebook App의 링크를 통해 Google 서버에 액세스 할 수 있습니다. Facebook은 링크에 ?code= 매개 변수를 자동으로 추가합니다. 이 추천에서 제공 한 code을 사용하려면 확인을 위해 state 매개 변수가 없어야하며 Facebook도 문제를 신경 쓰지 않는 것 같습니다.

state은 선택 사항입니까? 정말로 추가적인 보안 기능을 제공합니까?

답변

1

state 매개 변수는 선택 사항입니다. 서비스에서 유지할 가치가있는 정보가 있으면 추가 보안을 제공 할 수 있습니다. 보통 state 매개 변수는 쿠키로 처리 할 수있는 전체 세션을 처리하는 데이터와 달리 현재 브라우저 창에 대한 세션 상태에 대한 데이터를 유지하는 데 사용됩니다.

보안을 강화하기 위해이 기능을 사용하는 예는 다음을 수행 할 것입니다 :

  1. 사용자 방문 귀하의 사이트는 세션 쿠키를 설정
  2. 사이트 (예를 들어 Set-Cookie: id=xyzrandomstuff)
  3. 사용자가 필요로 뭔가를 시도 facebook 인증을하는 것
  4. 당신의 사이트는 세션 id xyzrandonstuff과 함께 사용할 수있는 CSRF 토큰을 생성하고 facebook 로그인을위한 state 매개 변수에 넣습니다.
  5. 사용자가 페이스 북에서 로그인을 완료했습니다 (보이지 않습니다)
  6. 사용자는 codestate 매개 변수를 사용하여 페이스 북에서 다시 돌아옵니다.
  7. code으로 로그인을 확인하고 3 단계에서 시작한 작업을 완료하기 전에 서버에서 CSRF 토큰이 현재 세션과 일치하는지 확인합니다.
+0

아주 좋은 설명 - 감사합니다. –

관련 문제