Self-hosted 로컬 CLI (커스텀인증구현)

셀렉트 어드민 CLI에서는 데이터베이스 접근과 모든 화면은 로컬/내부에서 처리하면서, 동시에 간편한 도입과 설치를 위해 로그인(인증, 사용자, 권한) 부분만 클라우드를 통해 제공하고 있습니다.

일부 금융권등 보안성 요건에 따라 로그인(인증)부터 모든 사용자 계정정보의 보관, 감사로그도 완벽히 내부망에서 이루어져야 합니다.

이를 위해 셀렉트 어드민은 완전구축형(on premise)을 지원하여 해당 요건을 준수했습니다. 그러나 기본 구축비용이 연 수천만원 단위로 높고 설치 및 유지보수 비용이 발생하는 한계가 있었습니다.

2025년 셀렉트 어드민 CLI는 어드민, 운영툴 구축 편리함, 도입 기업의 보안 준수를 모두 충족하기 위해 기존 엔터프라이즈 플랜에서도 '완전구축형' 기능을 제공합니다. (25년 2월 기준) 추가비용 없이 모든 인증과 로그를 구축 가능하며 모든 공통 소스코드는 내부 검증 가능한 형태로 제공합니다.

커스텀 제공 가능한 범위

  • 세션 발급, 만료, 유지정책
  • 구글 로그인
  • Email, Password 로그인
  • 권한 관리
  • 사용자 디렉토리
  • 사용자 활동로그/감사로그

설치

기존의 CLI와 동일합니다.

npm install selectfromuser

설치된 버전을 확인합니다. 2.4 이상의 버전이 필요합니다.

slt v

ADMIN_ON_PREMISE 환경변수 켜기

ADMIN_ON_PREMISE=1
GOOGLE_CLIENT_ID=*******-**********.apps.googleusercontent.com
GOOGLE_REDIRECT_URI=http://localhost:9300/api/connect/google/callback
GOOGLE_CLIENT_SECRET=GO****-**********************

.env에 입력한 모습 (다른방법으로 추가해도 됩니다)

프로젝트 팀 설정에서 next 옵션 켜기

문의바랍니다.

실행

어드민을 실행하여 인증 관련 부분이 더이상 api.selectfromuser.com가 아닌 자체 endpoint를 바라보는 것을 확인합니다.

slt

인증코드 추가

해당 폴더에 코드를 직접 추가 가능합니다.

_auth

  • refreshSession.js
    • 필수 (세션 검증시 이용)
  • getRoles.js
    • 필수 (권한 검증시 이용)
  • requestOTP.js
  • requestPasswordReset.js
  • submitOTP.js
  • submitPassword.js
  • connectGoogle.js
  • connectGoogleCallback.js
  • connectGoogleDevice.js

예제 코드: https://github.com/eces/select/tree/main/tests/next/_auth

기본 로그인(구글인증)을 위해서는 connectGoogle, connectGoogleCallback, connectGoogleDevice, refreshSession, getRoles만 추가하면 됩니다.

기본 예제에서는 리소스에 있는 데이터베이스 mysql.sample 에서 AdminUser 테이블에 계정을 관리합니다. 필요시 다른 데이터베이스(vercel, supabase, neon)를 이용 가능합니다. (예제가 필요한 경우 문의바랍니다. 레디스 예제)

CREATE TABLE `AdminUser` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `email` varchar(500) DEFAULT NULL,
  `name` varchar(500) DEFAULT NULL,
  `role` json DEFAULT NULL,
  `created_at` datetime DEFAULT NULL,
  `last_seen_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  `revoked_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

INSERT INTO `AdminUser` (`email`, `name`, `role`, `created_at`, `last_seen_at`, `updated_at`, `revoked_at`)
VALUES
	('jhlee@selectfromuser.com', 'jhlee', '[\"view\", \"Manager\"]', '2025-02-06 00:43:47', NULL, NULL, NULL);

로그 코드 추가

해당 폴더에 코드를 직접 추가 가능합니다.

_log

  • activityAudit.js

UI 호스팅

셀렉트에서 관리하는 UI가 아닌 버전 고정된 UI를 띄우고 싶은경우 다음으로 가능합니다.

slt ui

PORT=5173 slt ui

자주묻는 질문

셀렉트 클라우드에 전송되는 범위가 어떻게 될까요?

최초 어드민 접속시 프로젝트 정보 가져오기만 호출합니다.
/api/team/auth-methods?cname=589000c4525c-local.selectfromuser.com
해당 호출로 API Endpoint를 가져오고 이후 모두 로컬/내부망 endpoint로 전환합니다. (api.selectfromuser.com 에 대한 방화벽 허용이 필요)

💡
고객지원 문의시 콘솔로그, 에러메시지와 YAML을 첨부해주세요. 셀렉트 팀에서는 어드민 사용자 계정정보, 구성 리소스, 화면에 대해 접근할 수 없습니다.
어드민 사용자 정보가 외부에 전송되나요?

아니오. _auth 코드에서만 처리합니다. 다만 (개발자) CLI 로그인시 계정정보는 클라우드를 통해 처리됩니다. 어드민 사용자에 대한 트래킹은 하지않고 있으며 과금단위에도 포함하지 않습니다. (서비스 안정성을 위한 UI bug reporting은 존재, 방화벽 차단 가능)

Okta, Onelogin, LDAP등 연동 가능한가요?

네 가능합니다. 샘플 코드를 제공합니다.