2009-07-07 6 views
0

사용자가 자신의 DNS에서 내 IP를 가리킬 수 있도록하는 웹 기반 응용 프로그램이 있으며 내 응용 프로그램은 HTTP 호스트 헤더에 표시되는 도메인 이름을 기반으로 콘텐츠를 제공합니다. 나는 이것이 실제 HTTP 서버 (아파치)가 아닌 응용 프로그램에 의해 수행되었다는 것을 지적해야한다. 이것은 rebranded app 일종의 것이다. 내가 가진 문제는 사용자가 제공된 페이지에서 양식을 통해 로그인 할 수 있고 어떻게 든 사용자의 도메인 내에 머물 수 있기를 바랍니다. 보안을 원한다면 쉽습니다. 나는이 문제를 해결하기 위해 모든 도메인에 SSL 인증서를 설치해야합니다. 지금은 SSL 인증서가 설치된 도메인에 양식을 제출하여 할 수 있지만 브라우저 보안으로 인해 원래 도메인에 필요한 쿠키를 정확하게 설정할 수 없습니다.여러 도메인에 보안 로그인을 허용하는 방법

많은 사람들이 ssl certs를 많이 설치하지 않아도 앱을 통해 안전하게 로그인 할 수있는 방법을 알고 있습니다. 리디렉션이나 다른 메커니즘을 사용하여 복잡한 방식을 생각할 수도 있지만 그다지 깨끗하지는 않습니다. 보안 URL 및 리디렉션에 제출하는 데 신경 쓰지 않아도 쿠키를 설정할 수 없습니다.

답변

2

일반적인 트릭은 URL의 데이터를 전달하는 것입니다. Facebook Connect does this. URL에 세션 토큰을 사용하여 한 도메인에서 다른 도메인으로 리디렉션 한 다음 다른 도메인에서 요청이 들어올 때 토큰을 확인 (아마도 쿠키로 변환) 할 수 있습니다. 편집 : MSDN article에 페이스 북 링크가 훨씬 더 자세합니다.

3

나는

서버에서 인증 키를 만듭니다 ... 다음과 같은 방법을 사용하기 전에 이런 짓을 한 1

create_auth_key 
    expires = time + expire_time 
    data = username + '|' + password + expires 
    secret = 'my secret key' 
    hash = md5(data + secret) 
    key = base64(data) + hash 

서버 두에서 당신은 통과 새로 생성 된 인증 키

valid_auth_key(key) 
    hash = key[-hash_size:] 
    b64data = key[:-hash_size] 
    data = base64decode(b64data) 
    data_hash = md5(data + secret) 
    if data_hash != hash: 
     return false # invalid hash 
    data_parts = data.split('|') 
    user = data_parts[0] 
    password = data_parts[1] 
    expires = data_parts[2] 
    if now > expires: 
     return false # url expired 
    return true 

일종의 빠르고 더럽지 만 단순한 데이터 만 URL을 통해 전달됩니다. 단점은 특정 URL은 로그인에 필요한 모든 것이며 누군가가 일정 기간 동안 해당 URL을 공유 할 수 있다는 것입니다. 또한 만료 시간이 서버 간의 시간차보다 크지 않은지 확인해야합니다.

관련 문제