[ Architecture, Technology ,Web ] SSO(Single Sign On) 그리고 SAML에 대해

이미지
이번 프로젝트 내부에서 어쩌다보니  유저 인증 관련 업무를 담당하게 되었고, 해야하는 업무는 내부에 사용했던 적이 없던  새로운 개발 플랫폼에서  SSO의 프로토콜 중  SAML을 이용해 앱의 인증을 구현해야만 했다. SSO를 생각해본적 조차 없는 상황에 이를 새로운 개발 플랫폼에 도입해야 했기 때문에 많은 시행착오를 겪었으나 구현에 성공하였으며 덕분에 SSO에 대한 전반적인 지식을 쌓을 수 있었다. 이번에는 그러한 과정에서 나온 지식들과 경험을  공유하고자 한다. SSO에 대한 정의 먼저 사전적 정의 부터 살펴보자. 다만, 기술적인 용어다보니 자주 사용하는 옥스포드 사전에 정의를 찾을 수 없기 때문에  검색으로 찾을 수 있는 정의를 몇 가지 살펴보고 교차 검증을 해보자. 첫 번째 정의를 살펴보자. Single sign-on (SSO) is an identification method that enables users to log in to multiple applications and websites with one set of credentials.  SSO는 웹사이트에서 한 번의 인증(one set of credentials)으로 복수의 어플리케이션에 로그인 할 수 있는 인증(identification) 방법(method) 이다. 두 번째는 위키피디아의 정의이다. Single sign-on (SSO) is an authentication scheme that allows a user to log in with a single ID to any of several related, yet independent, software systems. SSO는 독립적이지만 연관되어있는 몇몇 소프트웨어에 대해 하나의 ID로 로그인을 할 수 있도록 하는 인증 구조(scheme) 세부 설명에 조금 차이가 있어 보이지만 전체적인 틀은 매우 비슷해 보인다.  몇 가지 포인트가 되는 단어를 추출해 이를 연결해보자면 아래와 같은 의미를 산출 할 수 있다. 독립적이지만 연관되어 있

[ Django, Python ] mozilla 튜토리얼 예제로 살펴보는 Django 분석 ⑦ - 2 : Testing against authenticated users(인증된 사용자에 대한 테스트)

이미지
인증된 사용자에 대한 테스트 이번에는 로그인 여부에 따라  사용자에게 표시되는 컨텐츠를  선택적으로 제어하는 기능에 대해 살펴보자.  ① Template에서 테스트 {{ user }} 템플릿 변수 를 사용해 현재 로그인한 사용자에 대한 정보를 얻을 수 있다. 일반적으로  {{ user.is_authenticated }} 템플릿 변수 를 이용해  사용자가 특정 콘텐츠를 볼 수 있는지 확인하자. 사용자가 로그 아웃 한 경우 "로그인" 링크를 표시하고 로그인 한 경우 "로그 아웃" 링크를 표시하도록  사이드 바를 추가 해보자. 먼저  /locallibrary/catalog/templates/  경로의  base_generic.html  파일에 <ul class="sidebar-nav"> ... {% if user.is_authenticated %} <li>User: {{ user.get_username }} </li> <li><a href="{% url 'logout'%}?next={{request.path}}">Logout</a></li> {% else %} <li><a href="{% url 'login'%}?next={{request.path}}">Login</a></li> {% endif %} </ul> 위와 같이 코드를 추가 하자. 우선 주목 해야할 곳은  {% user.is_authenticatd %} 의  조건부에 따라 출력되는 텍스트 이다. 관습적으로 앞에 is가 붙는 메소드들은  bool값을 가지는 경우가 많으므로  User가 인증되었다면 True를 인증되지 않았다면 False를 리턴할 것이고 그에 따라 출력되는 텍스트가 달라지는