[ 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 분석 ① : Path() 함수

이 위의 사진의 문자열이 나타난 시점에서는

Path() 함수에서 필수 매개변수인 routeview,
그리고 선택적 매개변수인 kwargsname가 브라우저에 전달된 것 이다.


공식 Django 도큐먼트에서는 Path()함수를 위와같이 설명하고 있다.
그럼 이 4개의 인수를 살펴보자.

Path() : route 매개변수

route 매개변수는 URL 패턴을 가진 문자열이다.
Request가 처리 될 때, Django에서는 urlpatterns의 첫 번째 패턴부터 시작해
일치하는 패턴을 찾을 때 까지 요청된 매개변수 URL와 패턴을 리스트의 순서대로 비교한다.


위의 사진은 실제 패턴들을 나타낸다.

하지만 위의 패턴들은 GET 이나 POST의 매개 변수들, 혹은 도메인 이름을 
검색하지 않는다. 

예를 들어, https://www.example.com/myapp/요청(Request)된 경우
URLconf는 오직 myapp/ 부분부터 바라 본다.

따라서 https://www.example.com/myaap/?page=3와 같은 요청에도

URLconf는 동일하게 myapp/ 부분부터 신경 쓰게 된다.



Path() : view 매개변수
Django에서 url()에서 일치하는 패턴을 찾으면
HttpRequest 객체를 첫번째 매개변수로 넣고, 경로(path)를 일치한 패턴의 url값을 키워드 매개 변수(keyword arguments)로 사용하여, 지정된 View() 함수를 호출 한다.

Path() : kwargs 매개변수
Kwargsview 함수나 메소드에 추가 인수를 전달하는 역할을 한다.
하지만 이번 튜토리얼에서는 사용하지 않는다.

Path() : name 매개변수
URL에 이름을 지으면 템플릿을 포함한 어느 계층이건 간에 참조가 가능하다.
이 강력한 기능을 이용하면 단하나의 파일만 수정해도 프로젝트 내의
모든 URL패턴을 바꿀 수 있도록 도와 준다.




참고

첫 번째 장고 앱 작성하기, part 1 :

django.urls functions for use in URLconfs :

Django 2.0 url() to path() cheatsheet :

이 블로그의 인기 게시물

[ Web ] 웹 애플리케이션 아키텍처 (Web Application Architecture)

[ Web ] 웹 애플리케이션? 웹 사이트?(Web Application? Web Site?)

[ Web ] 서버 사이드(Sever Side) ? 클라이언트 사이드(Client Side)? 1 [서론, 클라이언트 사이드(Client Side)]