2010-07-19 2 views
1

AppEngine에서 실행되는 기본 웹 사이트가 있습니다. 서브 도메인에있는 주소는 main.example.com입니다. 이 주요 응용 프로그램은 고객을위한 콘텐츠 포털입니다. YUI 기반의 Ajax 애플리케이션을 제공합니다. 고객이 데이터를 업로드 할 수 있습니다. 사용자는 연합 로그인을 사용하여 인증합니다.AppEngine 및 AppEngine이 아닌 하위 도메인의 OpenID 인증

Ajax 응용 프로그램을 사용하면 이전에 업로드 한 데이터를 처리 할 수 ​​있습니다. 이를 수행하려면 service.example.com과 같은 다른 하위 도메인에서 실행중인 웹 서비스를 사용해야합니다. 웹 서비스는 이 아니지만 AppEngine에서 실행되는을 실행하지만 Google의 서비스는 CPU가 무거 우며 다른 기술 집합을 기반으로합니다. 메인 애플리케이션의 데이터를 다운로드해야하지만 메인 애플리케이션의 모든 것과 같은 다운로드 서비스는 인증 벽 뒤에 있습니다.

필자는 프로그래밍 방식으로 서비스가 원하는 모든 것을 다운로드하도록 허용 할 수 있지만 이것이 주요 보안 문제가 될 수 있다고 생각합니다.

OpenID 인증 "토큰"을 다시 사용하여 주 응용 프로그램에 인증 된 사용자 (데이터)를 다운로드 할 수있게하려면 어떻게해야합니까? 아니면 내가 할 수있는 일을 성취하기위한 최선의 방법은 무엇인가?

답변

1

인증 토큰을 실제로 재사용 할 수 없습니다.

  1. 가 공유 암호를 생성, 모두 main.example.com 및 service.example.com
  2. 액세스 : 사용자가 제어하기 때문에 모두가 당신이 다소 간단 할 수 종료하지만 당신이 사용해야하는 것은, OAuth를 유사 뭔가
  3. 사용자가 처음으로 service.example.com에 액세스 할 때 (인증 쿠키 없음) main.example.com/auth?continue=original_url로 리디렉션하십시오 (여기서 original_url은 액세스를 시도한 URL 임)
  4. main.example.com/auth에 대한 요청을 받으면 먼저 사용자를 정규 방식으로 로그인합니다 (아직 로그인하지 않은 경우). 그런 다음 사용자 ID 또는 기타 관련 자격 증명을 가져 와서 1 단계에서 설정 한 공유 암호를 사용하여 HMAC을 생성합니다. 사용자를 service.example.com/finish_auth로 리디렉션하고 계산 된 HMAC, 다음과 같은 인증 세부 정보를 전달합니다. 사용자 ID 및 전달 URL과 같이 전달 된 매개 변수가 포함됩니다.
  5. service.example.com/finish_auth에 대한 요청을 받으면 위와 같이 HMAC를 계산하고 전달 된 것과 일치하는지 확인합니다. 그럴 경우 요청이 합법적 인 것입니다. 관련 세부 정보를 포함하는 service.example.com에 인증 쿠키를 설정하고 사용자를 원래 URL로 리디렉션합니다.

소리가 복잡하지만 구현이 간단합니다. 이것은 상호 신뢰하는 시스템간에 자격 증명을 전달하는 표준 방법이며 많은 SSO 시스템이 사용하는 것과 다르지 않습니다.