[ 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 ] 튜토리얼 예제로 살펴보는 Django 분석 ④ : 간단한 폼(form) 프로그래밍

이미지
・ 간단한 폼 (form) 프로그래밍 이전에 프로그래밍한 투표 기능의 detail() 이라는 View 의 템플릿 ( polls/detail.html ) 을 수정하여 , HTML <form> 요소를 아래의 사진과 같이 포함시켜보자 . 위의 태그를 간략하게 설명하자면 ・ 위의 템플릿은 각 질문 선택의 라디오 버튼 을 표시한다 . 각 라디오 버튼의 value 는 해당 질문 선택항목의 ID 이며 , 각 라디오 버튼의 name 은 “Choice” 이다 . 즉 , 사용자가 라디오 버튼 중 하나를 선택해 , 폼을 제출하면 POST 데이터 인 choice=# 을 보낼 것 이다 . 여기서 # 는 선택한 항목의 라디오 버튼 ID 이다 . ・ 폼 (form) 의 동작을 {% url 'polls:vote' question.id %} , method="post" 로 설정했다 . post 로 폼 (form) 을 제출하면 서버의 데이터가 되기 때문에 method="get" 와 다르게 method="post" 를 사용하는 것이 매우 중요하다 . 따라서 어떤 방법으로 웹을 개발 하던간에 서버의 데이터를 번경하는 폼 (form) 을 제출 하려한다면 method="post" 를 사용하는것이 일반적으로 좋다 . ・ forloop.counter 는 for 태그가 반복한 횟수를 나타낸다 . ・ 서버의 데이터에 영향을 줄 수 있는 POST 폼 (form) 을 제출 하기 때문에 [1] 사이트 간 요청 위조 (Cross Site Request Forgeries) 에 대해 대응할 필요가 있다 . 하지만 다행히도 Django 는 이를 보호 하기 위한 도구를 제공하기 때문에 이 문제에 대해 걱정할 필요 없다 . 따라서 내부 URL 을 대상으로 하는 모든 POST 형식의 폼 (form)