인증은 어느 어플리케이션이나 필요한 중요한 친구입니다.
이 중, 요새 SAML2를 집중적으로 보고 있는데요. SAML2의 경우 널리 사용되고 있지만, 그에 비해 문서나 자료가 부족하다고 느꼈습니다. SAML2를 사용하면서 얻은 팁(과 피 땀 눈물,,,)들을 간단하게 공유해 보겠습니다.
이 글은 기본적으로 SAML2에 대한 지식이 있음을 가정하고 작성했습니다.
SAML2 기본을 알고 싶으시다면 GRU님의 SSO 글을 추천드립니다.
1. SAML2 테스트 데이터 생성
SAML2 연동 자체는 요즘 제공되는 라이브러리들이 친절하게 지원해 주기 때문에 비교적 빠르게 진행할 수 있습니다. 그러나, 테스트를 하려고 하면 조금 생각을 하게 됩니다. 예를 들어서 어플리케이션 측에서 검증하는 파트를 테스트를 하고 싶다면, 실제 SAML2 응답을 생성하고 이를 기반으로 테스트를 돌려야 할 텐데요. 실제 응답은 실제 인증서를 기반으로 하므로 VCS에 올리면서 보안이 신경 쓰일 수 있고, 실제 응답에서 사용하는 인증서들은 만료 기간이 짧게 형성되기에 깨지기 쉬운 테스트가 되어서 고민이 될 수 있겠습니다.
저는 이를 해결하기 위해 OneLogin SAML Developer Tools를 활용하여 테스트 데이터를 직접 생성하고, 이를 테스트 리소스로 코드에 올렸습니다. 인증서는 만료를 한 100년 부여하면 사실상 깨지지 않는 테스트가 되며, 테스트만을 위한 인증서와 비밀 키를 사용하므로 VCS에 올라가도 보안 문제가 없게 됩니다.
저는 아래와 같은 절차로 생성했습니다.
- SAML2 인증 절차에 기반이 될 인증서를 생성
- certificate와 private key 모두 잘 저장해 둘 것!!
- 인증서 유효기간은 충분히 길게 넣어주세요.
- CN은 테스트에서 사용할 값으로 넣어주세요.
- 테스트를 위한 IdP 측 metadata 생성
- 사용할 acs값과 entity id를 사용해야 합니다.
- 버그 같은데, NameId Format 옵션이 동작하지 않습니다. 직접 필요한 값으로 넣어줍시다.
- response를 작성
- 사이트 내에서 제공되는 예시 데이터를 기반으로 시작하면 편합니다.
- Destination, NamedID, Recipient, Audience 등을 올바른 값으로 바꿔줘야 합니다.
- 기간이 있는 값도 만료일을 충분히 여유롭게 변경해줘야 합니다.
- 3에서 생성한 Response를 서명
- 서명된 xml에 공백이나 개행만 넣어도 invalid 한 값이 되니 조심합시다.
2. SAML2 디버깅 툴
SAML2와 관련된 디버깅은 복잡하고 까다롭습니다. 인증 과정에서 여기저기 Network Call을 쏘고, 이 과정에서 encoding 된 값들을 들고 다니기 때문인데요.
이 과정을 획기적으로 줄여줄 수 있는 Chrome Extension이 있습니다. 바로 SAML Tracer라는 친구인데요.
위와 같이 활성화하면 Network Call들을 잡아서 Trace를 남겨줍니다.
이 과정에서 SAML 관련 데이터를 포함했다면 우측에 강조 표시를 남겨주고, decoding 된 SAML xml 값을 확인할 수 있습니다.
또한, SAML2의 인증 과정은 여러 Network Call을 통해서 이루어지기 때문에 SAML값이 포함된 요청 전 후로 일어난 요청을 보고 흐름을 쉽게 볼 수 있는 점도 큰 강점이라고 생각했습니다.
그리고 Response의 Signing 된 부분은 위에서 언급된 SAML Tools 사이트에서 비밀키를 사용해 복호화할 수 있습니다.
3. 직접 연동해 보기
SAML2 연동을 테스트해 보기 위하여는 IdP가 필요한데요. 유명한 Okta와 같은 친구는 기본적으로 유료로 돌아가기 때문에, 이를 오래 유지하기 어렵습니다. 유지할 수 있는 테스트 환경을 위하여 사용할만한 IdP들이 있는데요.
우선 MockSAML 사이트입니다.
정말 간단하게 사이트에 있는 metadata url과 sso url을 가져가서 집어넣으면 가장 손쉽게 연동할 수 있습니다.
그런데 제약 조건이 하나 있습니다. 로그인 시, 도메인이 제한된다는 점입니다. 넘어오는 email로 뭔가 검증을 하고 있을 경우 문제가 될 수 있습니다.
그래서 실제 환경을 세팅하기 위하여 Microsoft Azure도 추천드립니다.
Azure AD에서 무료 계정을 생성하고, 엔터프라이즈 어플리케이션 메뉴의 내 어플리케이션 만들기를 통해서 SAML2 연동을 직접 해볼 수 있습니다.
---
SAML2는 다양한 인증 시나리오에서 꽤나 자주 사용되나, 많은 사람이 하게 되지는 않으므로 문서가 별로 없나,,? 생각했습니다.
이 글이 SAML2를 연동하며 겪는 고민을 1시간이라도 줄여줄 수 있다면 좋겠습니다 :)
인증맨들 모두 화이팅!
댓글