2016-07-18 5 views
0

나는 당신 자신의 롤업 구현을 위해 일하고있다. 두 개의 RP가 있습니다. RP 사이의 SSO가 작동하지 않습니다 (잘못). 나는 그것이 STS가 만들고있는 쿠키와 관련이 있다고 생각한다. STS는 자체적으로 fedauth 쿠키를 작성하고 있습니다. 내 이해에서 양식 인증 쿠키를 작성해야합니까?커스텀 STS SSO 실패

다른 RP에서 STS를 두 번째로 치면 ClaimsPrincipal에서 IsAuthenticated = True이지만 사용자에게 로그인하라는 메시지가 나타나고 자동으로 RP로 리디렉션되지 않습니다.

SSO가 자동 리다이렉트 및 모두 작동했지만 SSO가 작동했지만로드 밸런서의 RP가 컴퓨터 키 (끈적 세션 없음)를 사용하는 것처럼 쿠키를 공유하지 못했습니다. 인증서 (아래 코드)를 사용하는 사용자 지정 SessionSecurityTokenHandler를 구현하여이 문제를 해결했습니다. 이 시점에서 STS가 FedAuth 쿠키를 작성하기 시작했으며 SSO가 실패하기 시작했습니다.

FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(token); 

토큰 처리기 :

목표 명세서 토큰

가 작성되고

var sessionTransforms = new List<CookieTransform>(new CookieTransform[] 
    { 
     new DeflateCookieTransform(), 
     new RsaEncryptionCookieTransform(federationConfiguration.ServiceCertificate), 
     new RsaSignatureCookieTransform(federationConfiguration.ServiceCertificate) 
    }); 
    var sessionHandler = new SessionSecurityTokenHandler(sessionTransforms.AsReadOnly()); 
federationConfiguration.IdentityConfiguration.SecurityTokenHandlers.AddOrReplace(sessionHandler); 

답변

0

STS는 자체 쿠키를 기록합니다. 보안 토큰을 응용 프로그램에 게시합니다. 응용 프로그램은 일반적으로 세션 인증 쿠키를 작성하여 응답합니다 (만료 될 때까지 사용합니다).

웹 팜에서 작업하는 경우 이것은 WIF 구성을 사용합니다 :

물론 웹 팜의 컴퓨터는 동일한 컴퓨터 키를 공유해야합니다. 당신은 물론 자신의 메커니즘을 사용할 수 있지만 거의 의미가 없습니다.

다음으로 각 RP는 인증을 증명하는 자체 "세션"쿠키를 작성해야합니다. 두 RP가 같은 도메인에 있으면 다른 쿠키 이름을 사용해야합니다.

+0

컴퓨터 키를 사용하지 않아도 모든 컴퓨터에서 동일한 인증서가 사용됩니다. 각 RP가 자체 쿠키를 작성하고 있습니다. 그게 다 괜찮아. 내 질문은 : STS가 자체적으로 FedAuth 쿠키를 작성해야합니까? 그리고 : 다른 RP에서 다시 치게되면 STS가 자동으로 로그인하지 않는 이유는 무엇입니까? (예 청중이 올바르게 지정되었습니다.) – Swifty

+0

사용중인 STS를 알고 있다면 도움이됩니다. 일반적으로 로그인 할 때 STS는 자체 도메인에 쿠키를 작성합니다. 이 쿠키는 다음 RP에 대한 단일 사인온을 가지고 있는지 확인합니다. 이것은 정상 시나리오의 세션 쿠키 일 수 있고 "remember me"시나리오의 영구 쿠키 일 수 있습니다. RP는 원하는대로 자유롭게 할 수 있습니다. 일반적으로, 그들은 자신의 도메인에 세션 보안 토큰을 작성하여 보안 토큰에 응답합니다. 다음 RP가 STS로 이동하면 STS는 UI를 표시하지 않고 RP에 대한 보안 토큰을 보냅니다. 마지막 동작은 STS에 따라 다릅니다. –

+0

추가 할 사항 : 일반적으로 의존 당사자간에 세션 보안 토큰 쿠키를 공유하는 것은 좋지 않습니다. –