Sharepoint 2013 CBA 인증모드로 ADFS와 연동할 때 몇 가지 이해하기 어려운 개념이 있다.

바로 TokenLifetime과 LogonTokenCacheExpirationWindow 값이다.



앞의 글(Sharepoint 2013 CBA(ADFS 2.0)에서 명시적 로그아웃 구현하기)에서 언급하긴 했지만

이리저리 검색해봐도 개념이 제대로 정리가 되지 않고, 또 테스트하는 상황에 따라 결과도 좀 이상하게 나와서

정리하는 차원에서 제대로 좀 테스트를 해 봤다.




먼저, IE 11 기본 환경(인터넷 영역 - 영구 쿠키 차단)에서 테스트한 결과다.


ADFS: Get-ADFSRelyingPartyTrust

  - TokenLifetime(토큰 수명): 10시간

Sharepoint: Get-SPSecurityTokenServiceConfig

  - LogonTokenCacheExpirationWindow(인증 캐시 유효시간 계산값): 10분


이 테스트 상황에서는 기본적으로 Sharepoint 접속 시 인증 토큰(FedAuth) 영구 쿠키가 생성되지 않는데

희한하게도 문서 라이브러리에서 오피스 문서를 클릭해서 편집하면 오피스 프로그램이 열리는데

그 때 나타나는 인증 창에서 다시 한 번 더 로그인을 하면 영구 쿠키가 생성된다.


이 테스트는 해당 영구 쿠키가 생성된 이후에 시도했다.



[IE 접속 테스트 1]


1. 웹 브라우저 닫기 테스트

14:10 login, home --> 브라우저 종료

(5분 후 브라우저 실행, 재접속)

14:15 ? --> 자동 재 로그인 됨


2. 두 번째 테스트

14:20 login, home --> 브라우저 종료

(13분 후 브라우저 실행, 재접속)

14:33 ? --> 로그아웃 됨: LogonTokenCacheExpirationWindow 10분 초과

(이 결과는 무언가 좀 잘못된 듯... LogonTokenCacheExpirationWindow는 별 관계 없음)

3. 다음 날 오전 다시 테스트

8:54 login, home

(17분 후 home 클릭)

9:11 ? --> 자동 재 로그인 됨 (인증 토큰(FedAuth) 쿠키 파일은 갱신되지 않음)

(25분 후 home 클릭)

9:36 ? --> 자동 재 로그인 됨 (인증 토큰 쿠키 파일은 갱신되지 않음)


이상의 결과를 정리하면,


TokenLifetime 시간이 아주 긴 경우에는 LogonTokenCacheExpirationWindow 값에 의해 동작이 결정된다.

즉, LogonTokenCacheExpirationWindow 시간 이내에는 브라우저를 닫았다 열어도 여전히 로그인이 유지된다.

이후 시간에는 브라우저를 닫았다 열면 로그아웃되어 명시적으로 다시 로그인을 해야 한다.

(이 결론 역시 무언가 좀 잘못된 듯... LogonTokenCacheExpirationWindow는 별 관계 없음)





다음으로, IE 보안 설정에서 해당 Sharepoint 사이트를 "로컬 인트라넷"(또는 신뢰할 수 있는 사이트) 영역에
추가한 다음 테스트한 결과다.


빠른 테스트를 위해 설정값을 조금 조정했다.


ADFS: Get-ADFSRelyingPartyTrust

  - TokenLifetime(토큰 수명): 15분

Sharepoint: Get-SPSecurityTokenServiceConfig

  - LogonTokenCacheExpirationWindow(인증 캐시 유효시간 계산값): 10분


여기서, TokenLifetime에서 LogonTokenCacheExpirationWindow을 뺀 시간을 "세션 수명(Session lifetime)"이라고 정의했다.(출처: SharePoint Authentication and Session Management)


세션 수명 = 15분 - 10분 = 5분


이 세션 수명은 인증 토큰(FedAuth)이 발급된 시점을 기준으로 한 고정·절대시간 값으로,

해당 시간이 지나면 기존 인증 토큰이 무효화(삭제)되고 새로운 인증 토큰이 발급된다.


즉, 위 첫 번째 테스트에서는 세션 수명이 10시간 - 10분 = 9시간 50분이었다.

웹 브라우저로 Sharepoint를 계속 사용하면

최대 세션 수명, 즉 9시간 50분까지는 동일한 인증 토큰을 사용할 수 있고

9시간 50분이 초과하는 순간 인증 토큰이 새로 발급된다.




[IE 접속 테스트 2]


1. 웹 브라우저 닫기 테스트

10:15 login, home --> 브라우저 종료

(1분 후)

10:16 ? --> 자동 재 로그인 됨 (인증 토큰 쿠키 파일은 갱신되지 않음), 브라우저 종료

(1분 후)

10:17 ? --> 자동 재 로그인 됨 (인증 토큰 쿠키 파일은 갱신되지 않음), 브라우저 종료

(5분 후)

10:23 ? --> 로그아웃 됨: 세션 수명 5분 초과(10:15 기준)


2. 웹 브라우저 닫기 테스트

10:23 login, home --> 브라우저 종료

(4분 후)

10:27 ? --> 자동 재 로그인 됨 (인증 토큰 쿠키 파일은 갱신되지 않음), 브라우저 종료

(2분 후)

10:29 ? --> 로그아웃 됨: 세션 수명 5분 초과(10:23 기준)


3. 웹 브라우저 닫기 테스트

10:30 login, home --> 브라우저 종료

(6분 후)

10:36 ? --> 로그아웃 됨: 세션 수명 5분 초과(10:30 기준)


4. 혼합 테스트

10:38 login, home

(7분 후)

10:45 home refresh ? --> 자동 재 로그인 됨 (인증 토큰 쿠키 파일이 갱신됨)

(4분 후)

10:49 home refresh ? --> 로그인 유지 (인증 토큰 쿠키 파일은 갱신되지 않음)

(2분 후)

10:51 home refresh ? --> 자동 재 로그인 됨 (인증 토큰 쿠키 파일이 갱신됨), 브라우저 종료

(1분 후)

10:52 ? --> 자동 재 로그인 됨 (인증 토큰 쿠키 파일은 갱신되지 않음), 브라우저 종료

(5분 후)

10:57 ? --> 로그아웃 됨: 세션 수명 5분 초과(10:51 기준)


5. 웹 브라우저를 닫지 않고 일정 시간 후에 메뉴 클릭 테스트

13:16 login, home

(17분 후)

13:33 home refresh ? --> 자동 재 로그인 됨 (인증 토큰 쿠키 파일이 갱신됨)

--- 이유: ADFS 로그인 세션 쿠키가 유효하므로 인증 토큰 수명이 만료(15분 초과)됐지만 자동 재 로그인 됨


이상의 테스트 결과를 정리해 보면 다음과 같다.


1. 세션 수명 이내에는 브라우저를 닫았다 다시 열어도 로그인 상태가 유지된다.

2. 세션 수명을 넘긴 뒤에는 인증 토큰이 갱신된다.

   (웹 브라우저가 닫힌 경우에는 로그아웃 상태가 됨.)

3. 웹 브라우저를 닫지 않고 열어두는 경우에는 로그인 상태가 계속 유지된다.

   (위 두 유효시간이 지나도 인증 토큰은 자동 갱신된다.)




위 두 테스트를 통해 다음의 결론을 얻을 수 있다.

로그인하여 사용하는 중에도 인증 토큰이 수시로 재발급되는 상황을 피하려면 세션 수명은 길수록 좋다.
즉, 토큰 수명(TokenLifetime)과 인증 캐시 유효시간 계산값의 차이가 최대한 클수록 좋다.
(TokenLifetime 기본값 10시간, 괜찮다.)
적어도 세션 수명이 마이너스가 되는 일은 없어야 한다. 마이너스가 되면 로그인-로그아웃이 무한 반복된다.

세션 수명 때문에 웹 브라우저를 닫았다 열어도 여전히 로그인 상태가 되는데

이 시간을 1초(최소값)까지 줄이면 웹 브라우저를 닫았다 다시 여는 경우에(최소한 1초 이상은 소요되므로)

자동 재 로그인이 되는 것을 거의 완전히 차단할 수는 있다.

단, 1초마다 인증 토큰이 재발급되기 때문에 성능상, 그리고 동작 구조상 그다지 바람직하지 못하다.


공용 PC의 경우라 해도, 세션 수명이 너무 짧으면 이와 같은 문제가 있으므로

한 사람이 웹 브라우저를 닫은 후 다른 사람이 자신의 계정으로 접속할 때까지 몇 분 이상 소요된다고 가정하면

세션 수명도 몇 분 이상은 되도록 설정하는 것이 적절하다.


결론적으로,

브라우저가 열려 있는 상태에서는 계속 로그인 상태를 유지하고,

브라우저를 닫았다 다시 열면 로그인을 다시 해야 한다면

TokenLifetime을 5분, LogonTokenCacheExpirationWindow을 4분 정도로 설정하면 무난할 듯.

(1분 마다 인증 토큰 갱신)

또는

TokenLifetime을 60분, LogonTokenCacheExpirationWindow을 59분 정도로 설정하면 무난할 듯.

(1분 마다 인증 토큰 갱신)


마지막으로, 이상의 테스트로부터 얻은 중요한 용어 및 개념을 정리해 봤다.



TokenLifetime(토큰 수명): 기본값 0 (=10시간)

   --> 인증 토큰(FedAuth) 발급 후 만료되기까지 사용할 수 있는 최대 시간


LogonTokenCacheExpirationWindow(인증 캐시 유효시간 계산값): 기본값 10분

   --> 세션 수명을 결정하기 위한 계산값


세션 수명(Session Lifetime)TokenLifetime - LogonTokenCacheExpirationWindow = 9시간 50분

   --> 인증 토큰(FedAuth) 발급 후 유효한 최대 시간(인증 토큰 발급 시각 기준)

   --> 이 시간이 지나면 인증 토큰 강제 재발급


ADFS 로그인 쿠키(MSISAuth, MSISAuth1, MSISSignout, MSISAuthenticated)

   --> 브라우저가 열려 있는 동안만 유지되는 세션 쿠키

   --> ADFS 서버에서 현재 로그인되어 있는 상태인지 판단

   --> 브라우저가 닫히면 없어지고, 로그인/재인증할 때 생성됨





Posted by 떼르미
,


자바스크립트를 허용해주세요!
Please Enable JavaScript![ Enable JavaScript ]