나는 당신 자신의 롤업 구현을 위해 일하고있다. 두 개의 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);
컴퓨터 키를 사용하지 않아도 모든 컴퓨터에서 동일한 인증서가 사용됩니다. 각 RP가 자체 쿠키를 작성하고 있습니다. 그게 다 괜찮아. 내 질문은 : STS가 자체적으로 FedAuth 쿠키를 작성해야합니까? 그리고 : 다른 RP에서 다시 치게되면 STS가 자동으로 로그인하지 않는 이유는 무엇입니까? (예 청중이 올바르게 지정되었습니다.) – Swifty
사용중인 STS를 알고 있다면 도움이됩니다. 일반적으로 로그인 할 때 STS는 자체 도메인에 쿠키를 작성합니다. 이 쿠키는 다음 RP에 대한 단일 사인온을 가지고 있는지 확인합니다. 이것은 정상 시나리오의 세션 쿠키 일 수 있고 "remember me"시나리오의 영구 쿠키 일 수 있습니다. RP는 원하는대로 자유롭게 할 수 있습니다. 일반적으로, 그들은 자신의 도메인에 세션 보안 토큰을 작성하여 보안 토큰에 응답합니다. 다음 RP가 STS로 이동하면 STS는 UI를 표시하지 않고 RP에 대한 보안 토큰을 보냅니다. 마지막 동작은 STS에 따라 다릅니다. –
추가 할 사항 : 일반적으로 의존 당사자간에 세션 보안 토큰 쿠키를 공유하는 것은 좋지 않습니다. –