Sharepoint 2013 서버를 CBA(Claims-Based Authentication) 모드로 ADFS와 연동해 놓으

두 가지 이상한 문제점(?)이 보인다.


하나는 로그아웃을 명시적으로 할 수가 없다는 점.

또 하나는 한 번 로그인 하고 나면 그 다음부터는 의도치 않게 자동으로 로그인이 된다는 점. 


로그아웃을 명시적으로 할 수가 없다는 얘기가 무슨 얘기냐면... 일단 로그아웃 링크는 있다.

그런데 그걸 클릭하면 웹 브라우저를 닫으라는 페이지만 표시되고 실제로 로그아웃 처리는 안된다.

웹 브라우저를 다시 열면 저절로 자동 로그인이 되니까 말이다.



>> 참조: Sharepoint Authentication and Session Management (http://blog.robgarrett.com/2013/05/06/sharepoint-authentication-and-session-management/)



이유를 찾아 봤더니 WS-Federation에 정의된 세션(캐시) 유지 시간 때문인 것으로...

즉, Sharepoint 서버 내부에서는 LogonTokenCacheExpirationWindow 값(기본값: 10분)을 가지고

웹 브라우저가 열려 있는지 여부에 관계없이 로그인 세션을 유지하는데

이 시간 이내에는 웹 브라우저를 닫았다 다시 열어도 인증된 상태를 유지하는 것.


그런데, 이것이 끝이 아니고,

ADFS 서버에서 유지하는 TokenLifetime 값(기본값: 0 = 10시간)도 중요한 역할을 하는데

이 시간 동안은 사용자 세션이 유지된다. 즉, 위 LogonTokenCacheExpirationWindow 값에 정의된 시간이 지나면

ADFS 서버로 재 인증 요청이 가게 되는데 ADFS 서버에서 TokenLifetime 시간 이내에는 자동으로 새로운 인증 토큰을 발급해주기 때문에 여전히 인증된 상태가 유지되는 것이다. 단, 웹 브라우저가 닫혀 있지 않을 때만.


이것이 의미하는 것은, 어지간해서는 하루가 지나기 전에는 한번 로그인 하면 다시 로그인할 필요가 없다는 것.

으잉??? 이거 보안적으로 살짝 문제가 있는 것은 아닌가? 10분 정도는 짧으니까 별 상관없을까?





이를 해결(?)하기 위해

첫 번째로는 위 그림처럼 ADFS 서버의 TokenLifetime 값을 15~20분까지 줄이는 방법이 있고,

(그러면 웹 브라우저를 닫고 15~20분 뒤에는 반드시 재로그인 해야 한다.)

두 번째로는 Sharepoint의 LogonTokenCacheExpirationWindow 값을 1~2분까지 줄이는 방법이 있고,

(그러면 웹 브라우저를 닫고 1~2분 뒤에는 반드시 재로그인 해야 한다.)

그 다음으로는 명시적으로 로그아웃을 하면 그 다음부터는 자동 로그인이 되지 않도록 하게 하기 위해

WS-Federation에서 정의된 Signout 기능을 구현할 방법을 찾아 봤다.



>> 참조: WS-Federation Signout 구현(http://social.technet.microsoft.com/wiki/contents/articles/1439.ad-fs-how-to-invoke-a-ws-federation-sign-out.aspx)



일단 방법은 찾았고,
다음은 Sharepoint의 Signout 페이지를 커스터마이징해서 위 Signout 페이지로 Redirection 시켜야 하는데,
이 방법 역시 구글링을 통해 간단히 찾았다.




바로, C:\Program Files\Common Files\Microsoft Shared\web server extensions\15\TEMPLATE\LAYOUTS\signout.aspx 페이지를 수정하면 되는 것.


여기에서 signout.aspx를 찾아서 메모장으로 열고,




위 그림처럼 ADFS 페이지의 signout 기능 페이지로 바로 Redirection 시킨다.



여기에서 끝...이 아니라 마지막으로
ADFS의 로그아웃 페이지도 수정해서 로그아웃이 끝난 다음 보여줄 페이지를 결정하는 작업이 하나 더 남았다.

ADFS 3.0은 안되지만

ADFS 2.0은 로그인/로그아웃 페이지가 일반 ASPX 페이지로 만들어져 있어 쉽게 커스터마이징이 가능하다.




ADFS 서버의 /adfs/ls 폴더에서 SignOut.aspx 페이지를 찾아,




위 그림처럼 넘어온 URL 값을 보고 판단하는 로직을 살짝 하나 넣어주면 끝.









Posted by 떼르미
,


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