1

별도의 도메인에 두 개의 사이트가 있습니다. Thinktecture IdentityModel을 사용하여 SSO를 구현하고 있습니다.Thinktecture IdentityModel 토큰으로 재생 공격을 방지하려면 어떻게합니까?

사용자가 사이트 A에 로그인하면 사이트 B로 연결되는 링크를 누릅니다. 사이트 A는 JWT 토큰을 사용하여 사용자를 사이트 B/Login.aspx? token = < 토큰>으로 리디렉션합니다. 그런 다음 사이트 B는 사용자를 인증하기 위해 사이트 A에서 API를 호출하여 토큰의 유효성을 검사합니다. 인증을 받으면 사용자는 자동으로 사이트 B에 로그인합니다.

기본적으로 Thinktecture 토큰은 토큰을 죽일 방법이 없으므로 (내가 알 수있는 한) 10 시간 동안 지속됩니다. 사용자가 사이트에서 로그 아웃하면 토큰은 계속 유효합니다. 브라우저 기록을보고 "Login.aspx? token = < 토큰>"URL을 얻고 자동으로 다시 로그인됩니다. 로그 아웃 할 때 모든 사용자 토큰을 삭제할 수있는 방법이 있습니까? 토큰이 쿼리 문자열의 일부로 전달되지 않아야합니까? 재생 공격을 막는 가장 좋은 방법은 무엇입니까?

+1

Well - 자신 만의 SSO 프로토콜을 사용하는 대신 WS-Fed 또는 OpenID Connect와 같은 표준을 사용하고 위협 모델 및 완화 기술의 이점을 누릴 수 있습니다. – leastprivilege

+0

Thinktecture는 Federated 로그 아웃 또는 보안 토큰 취소를 지원합니까? – user1686249

+0

WS-Federation은 로그 아웃을 포함하여 .NET 4.5에 직접 내장되어 있습니다. Thinktecture는 프로토콜이 아니며 도우미 라이브러리입니다. – leastprivilege

답변

0

게시 토큰과 같은 사운드는 적어도 가장 명백한 시나리오에서 문제를 해결해야합니다. JWT 토큰을 사용하지 않았지만 SAML 토큰은 일반적으로 게시됩니다. jwt 토큰을 게시하도록 서버를 구성 할 수 있습니다.

1

@leastprivilege 님이 질문에 대해 언급 한 것처럼, 두 사이트를 동일한 IDP를 신뢰하는 RP (신뢰 당사자)로 정의하면 두 사이트 모두에서 SSO를 쉽게 얻을 수 있습니다. 물론 인증 솔루션 아키텍처를 단순화합니다.

WS-Fed를 사용한 수동 인증은 여전히 ​​재생 공격에 취약합니다. 토큰이 사이트에 게시되지만 브라우저에서 "뒤로"를 몇 번 (로그 아웃 한 후에도) 누르면 사이트에 토큰이 다시 게시되어 사용자에게 다시 로그인하게됩니다.

다행히도 WIF 해당 공격을 완화 할 수있는 방법이 있습니다. 구성하면 다음과 같습니다.

Wif는 서버에서 사용 된 토큰을 캐시하고 한 번만 사용합니다. 재연 공격이 감지되면 적절한 예외가 발생합니다 (SecurityTokenReplayDetectedException).

물론이 캐시는 프로세스 재활용에서 살아남지 않으며 웹 팜 시나리오에서는 충분하지 않습니다. 이러한 시나리오에 대한 공격을 완화하려면 분산 된 캐시 인 &이 필요합니다.

a contribution to Thinktecture.IdentityModel으로 구현 했으므로 살펴보고 사용할 수 있습니다.

+0

이 설정은 어디에 있습니까? 내 권한없는 오류의 원인을 방금 설명했다고 생각합니다. –

+1

@PeterWone이 설정은 system.identityModel - WIF (Windows Identity Foundation) 구성 아래의 web.config에 있습니다. – RonyK