Mendix SAML SSO 자동 로그인과 딥링크 유지

2026.10.04
  • 시리즈 8/16
  • 개발
  • Mendix 10
  • SSO

SSO를 붙였는데도 사용자는 로그인 화면에서 SSO 버튼을 한 번 더 눌러야 했다. 로그인 페이지에 JS 스니펫 하나를 넣어, 화면이 열리면 바로 SSO로 이동하게 했다. 메일 링크처럼 특정 페이지로 들어온 경우 로그인 후 그 페이지로 돌아가고, 관리자는 주소에 표시를 붙여 기존 로그인 화면을 쓴다.

문제

포털이나 메일 링크로 들어와도 로그인 화면에서 한 번 더 클릭해야 함

원인

SSO 버튼이 Nanoflow로 JS Action을 호출하는 구조라 사용자가 누르기 전에는 실행되지 않음

해결

로그인 페이지에 같은 이동 로직을 자동 실행하는 스니펫 추가. 탭당 1회 제한, 관리자 우회 경로 유지

기존 SSO 버튼이 하는 일

버튼이 호출하는 JS Action은 현재 주소를 cont 파라미터에 담아 /sso로 보낸다. SAML 모듈은 인증 후 cont 경로로 돌려보낸다.

기존 동작
루트로 접속             →  /sso
딥링크로 접속 (/p/xxx)  →  /sso?cont=/p/xxx   (로그인 후 원래 페이지로)

선택지

구분A. 접속 링크를 /sso로 변경B. 로그인 페이지 자동 실행
작업량Mendix 수정 없음스니펫 1개
포털 링크로 접속자동 로그인자동 로그인
즐겨찾기, 주소 직접 입력로그인 화면 그대로자동 로그인
메일 딥링크로그인 화면 그대로로그인 후 원래 페이지

모든 진입 경로를 덮으려면 B가 필요하다. A는 B와 함께 써도 문제없다.

스니펫

로그인 페이지에 HTMLSnippet을 추가하고 Content type을 JavaScript로 설정한다.

로그인 페이지 스니펫 (JavaScript)
(function () {
  try {
    if (/[?&]manual\b/.test(window.location.search)) return;   // 관리자 우회
    if (sessionStorage.getItem('sso_auto_once')) return;       // 탭당 1회
    sessionStorage.setItem('sso_auto_once', '1');
  } catch (e) { return; }

  var path = window.location.href.replace(window.location.origin, '').replace('/#', '/p');
  var cont = (path && path !== '/') ? '?cont=' + path : '';
  window.location.replace('/sso' + cont);
})();

안전장치

장치막는 것
sessionStorage 1회 표시SSO 실패 시 로그인 화면과 /sso를 무한 반복
같은 탭에서 로그아웃 후 유지로그아웃하자마자 다시 자동 로그인
?manual 파라미터SSO 계정이 없는 관리자가 로그인 화면에 못 들어가는 문제
location.replace뒤로가기 시 로그인 화면이 다시 나오는 문제
접속 경로
일반 사용자   https://<주소>/          →  자동 SSO  →  메인 화면
관리자        https://<주소>/?manual   →  이동 없음  →  ID, 비밀번호 입력
?manual이 유지되는지 확인 필요Mendix가 첫 로딩 때 쿼리 문자열을 지우지 않는다는 전제로 만든 코드다. 배포 후 반드시 확인하고, 자동 이동돼 버리면 기본 로그인 페이지(login.html)를 관리자 경로로 쓰는 방법이 있다.

배포 후 확인

  • 루트 주소로 접속하면 메인 화면까지 바로 가는가
  • 메일 딥링크로 접속하면 로그인 후 해당 페이지가 열리는가
  • ?manual로 접속하면 로그인 화면이 유지되는가
  • 로그아웃 후 같은 탭에서 로그인 화면에 머무는가
  • SSO 실패를 일부러 만들었을 때 반복 이동이 없는가
시리즈 목차 16편
  1. PI 담당자가 로우코드로 사내 시스템을 직접 만들고 운영한 기록
  2. Mendix Datagrid2 대신 HTMLSnippet과 JS로 목록 화면 만들기
  3. Mendix SPA에서 HTMLSnippet JS가 꼬이는 이유: 이벤트 중복과 DOM 공존
  4. Mendix mx.data.commit이 조용히 실패할 때
  5. Mendix Java heap OOM 추적기: base64 이미지 컬럼
  6. Mendix 커밋 롤백, 용량 문제가 아니었다: FileDocument 전환기
  7. Mendix 첫 접속 지연 줄이기: 워밍업과 캐시
  8. Mendix SAML SSO 자동 로그인과 딥링크 유지 (현재 글)
  9. Mendix Studio Pro에서 안 바뀌는 스타일 main.scss로 바꾸기
  10. Mendix MPK 파일 열어서 마이크로플로우 구조 보기
  11. SSO 로그 테이블로 MAU와 재방문율 구하는 SQL
  12. Mendix DateTime이 BI 도구에서 하루 빠르게 보이는 이유
  13. 대시보드 숫자가 틀렸을 때 확인하는 순서
  14. 보기 좋은 대시보드에서 할 일을 알려주는 대시보드로
  15. 여러 점검 시스템을 하나로 합치는 데이터 모델
  16. 데이터 비전공자에게 분석 결과 보고하기
  • #Mendix
  • #SAML
  • #SSO
  • #자동로그인
  • #딥링크
  • #JavaScript

댓글