2010-03-29 3 views
0

나는이 두 사이트 : example.com 및 exampletwo.com인증 및 로그인

내가 원하는 example.com에 사용자 로그인 후 그는 자동으로 exampletwo.com

에도 인증 될 때 어떻게해야합니까? 첫 번째 웹 사이트에서는 Django + Nginx를 사용하고 두 번째 웹 사이트에서는 Tornado 프레임 워크 + 토네이도 서버를 사용합니다.

감사 :)

.

P. 이 플랫폼 (Django 또는 Tornado 또는 Nginx)을 모르는 경우 일반 PHP + Apache 플랫폼에 대한 솔루션을 수락 한 후 일부 조사를 수행합니다.

답변

1

사용자 등록을 처리하는 코드가 있습니다. example.comhttps 요청을 즉시 exampletwo.com (인증서를 기반으로 인증합니다.)은 "이 사용자에게이 자격 증명을 추가하십시오"라는 의미입니다. 이 접근법은 HTTPS 요청을 보내고 받고 인증서를 인증 할 수있는 한 두 웹 서버/프레임 워크/언어에서 작동하는 것으로 보입니다.

인증서를 인증 할 수없는 경우 두 사이트가 암호화에 사용할 비밀을 공유 할 수있는 한 "이 사용자 추가"메시지를 암호화하여 보낼 수 있습니다. 이것은 재생 공격에 취약 할 수 있지만 "이 사용자 추가"메시지의 타임 스탬프 부분을 만들면 재생 공격에 대한 취약성 시간 창을 크게 제한 할 수 있습니다.이 접근법을 실행 가능하게 만들 정도로 충분할 것입니다.

두 사이트간에 안전하게 비밀을 공유 할 수없는 경우 모든 것이 손실되지는 않지만 공개 키 캡션을 사용할 수 있습니다. 발신자는 자신의 개인 키를 사용하여 "이 사용자 메시지 추가"(물론 타임 스탬프 포함)를 암호화 한 다음 수신자의 공개 키를 사용하여 암호화합니다. 수신자는 수신 한 내용을 자체 개인 키로 해독 한 다음 발신자의 공개 키로 해독합니다. 좀 지저분하고 조금 느릴 수도 있지만, 어려운 제약 조건 하에서는 여전히 전혀 할 수없는 놀라운 일입니다 .--).

0

두 웹 사이트 모두 단일 공유 데이터베이스에 액세스 할 수 있다고 가정하면 웹 페이지가 테이블에 액세스하고 사용자가 로그인했는지 여부를 확인할 수 있습니다. Djano 또는 Tornado에 익숙하지 않지만 위의 해결 방법이 의심 스럽다면 한 웹 사이트의 웹 메서드 (웹 서비스)를 노출 한 다음 다른 웹 메서드를 사용 (호출) 할 수 있습니다. 쿠키는 사이트마다 다르기 때문에 쉽게 생각할 수 있습니다. 또 다른 방법은 IP를 통해 사용자를 추적하는 것이지만 동적 IP는 큰 문제가 될 수 있으며 보안을 위반하는 데 사용될 수 있습니다.

0

문제는 한 사이트에서 다른 사이트에 쿠키를 설정할 수 없다는 것입니다. example.com의 로그인 코드가 exampletwo.com에 사용자의 유효성을 알리기 위해 서버 간 요청을 수행한다고해도 사용자가 실제로 exampletwo.com을 방문 할 때이 메시지를 전달할 수있는 쿠키를 설정할 방법이 없습니다.

클라이언트 인증서가이 문제를 해결하는 방법이지만이 이중 인증 시스템이 일반 대중을위한 것이지 특히 좋은 인증서는 아닙니다. 대부분의 사람들은 이상한 요청 ('이 인증서를 추가 하시겠습니까?') 팝업을보고 비명 소리를내는 언덕으로 뛰어갑니다.

해결 방법은 사용자가 exampletwo.com에서 무언가를로드하게하는 SOMETHING을 내뱉습니다. 이미지, 자바 스크립트 덩어리 등 ... 요청에 암호화 된 토큰을 넣으십시오 (<img src="http://exampletwo.com/login.php?remoteauth=ENCRYPTEDTOKEN">). 그런 다음 exampletwo는 토큰의 암호를 해독 할 수 있으며 내용이 정상이면 적절한 쿠키 세트를 사용하여 이미지를 전송할 수 있습니다.