2012-04-25 9 views
3

자체 개발 인증을 사용하는 기존 ASP.NET 응용 프로그램 (WebForms)이 있습니다. 우리는 싱글 사인온 솔루션을 구현하고 WIF를 사용하기로했습니다.WIF 및 하위 도메인

응용 프로그램의 단일 인스턴스가 실행되며 하위 도메인 (예 : client1.ourapp.com, client2.ourapp.com 등)을 사용하여 클라이언트를 식별합니다. 응용 프로그램 코드에서 첫 번째 하위 도메인을 제거하고 클라이언트를 식별합니다.

우리는 WIF 증명 개념을 사용하여 인증 된 사용자가 올바른 하위 도메인으로 리디렉션되는 방법을 찾아 냈습니다. 기본 동작은 STS가 구성 파일에서 식별되는 영역으로 사용자를 리디렉션하는 것으로 보입니다. 다음은 PoC 설정 파일입니다. 내 호스트 파일을 사용하여 다른 클라이언트를 가짜로 만듭니다 (예 : 127.0.0.1 client1.ourapp.com, 127.0.0.1 client2.ourapp.com).

<federatedAuthentication> 
    <wsFederation 
     passiveRedirectEnabled="true" 
     issuer="http://ourapp.com/SSOPOCSite_STS/" 
     realm="http://client1.ourapp.com" 
     requireHttps="false" /> 
</federatedAuthentication> 

모든 사람을 동일한 하위 도메인으로 리디렉션 할 수 없기 때문에 분명히 작동하지 않습니다.

우리는이 문제를 어떻게 처리해야하는지 알았지 만, 우리가 올바른 방법으로하고 있는지 아니면 그냥 운이 좋았는지에 대한 외부 의견을 원합니다.

FAM의 RedirectingToIdentityProvider 이벤트에 대한 이벤트 처리기를 만들었습니다. 여기에서 우리는 요청 URL에서 회사 이름을 얻고 회사 이름을 사용하여 영역 문자열을 만들고 SignInRequestMessage의 Realm 및 HomeRealm을 설정 한 다음 FAM으로 하여금 인증을 위해 STS로 리다이렉트하도록합니다.

protected void WSFederationAuthenticationModule_RedirectingToIdentityProvider(object sender, RedirectingToIdentityProviderEventArgs e) 
{ 
    // this method parses the HTTP_HOST and gets the first subdomain 
    var companyName = GetCompanyName(); 
    var realm = GetRealm(companyName); 

    e.SignInRequestMessage.Realm = realm; 
    e.SignInRequestMessage.HomeRealm = companyName; 
} 

string GetRealm(string companyName) 
{ 
    return String.Format("http://{0}.ourapp.com/SSOPOCSite/", companyName); 
} 

이 문제는 합리적인 해결책으로 보입니까?

결과적으로 어떤 문제가 있습니까?

더 좋은 방법이 있습니까?

답변

1

당신의 솔루션은 좋은 소리를냅니다 (필요한 정보를 명시 적으로 전달 함). 다른 솔루션은 Request.UrlReferrer을 사용하여 사용자가 어떤 하위 도메인에서 왔는지 결정하는 것입니다.