보안 & 신원실행의 세계 · SSO, 토큰, OAUTH

사용자는 무엇이든 연결합니다.
당신은 토큰을 만질 일이 없습니다.

4계층 신원 서비스와 최종 사용자별로 암호화된 자격 증명 브로커입니다: RS256 JWT는 여러분 쪽에서 JWKS를 통해 로컬로 검증하고, 모든 외부 서비스로의 OAuth 흐름은 저희 쪽에서 전부 처리합니다.

문서 보기
RS256 + JWKSAES-256-GCM 봉투 암호화Argon2idPKCE 강제 적용15분 토큰
문제

멀티테넌트 신원과 OAuth 중개는 주말 프로젝트가 아닙니다.

계층별로 범위를 나누는 로그인 체계, 네트워크 호출 없이 다운스트림 서비스가 검증할 수 있는 JWT, 그리고 사용자가 승인한 모든 외부 OAuth 토큰을 담아둘 곳이 필요합니다 — 암호화되고, 테넌트별로 격리되며, 아무도 모르게 자동으로 갱신되어야 하죠. Auth Manager가 이 모든 것을 담당하므로 자격 증명 로직이 두 곳에 나뉘어 존재하지 않습니다.

4계층 신원

관리자 → 조직 → 애플리케이션 → 사용자. 각 계층은 고유한 ID 형식과 로그인 모델을 가지므로 권한이 실수로 상위 계층으로 확대되지 않습니다.

로컬로 검증되는 RS256 JWT

모든 다운스트림 서비스는 공개된 JWKS 엔드포인트를 기준으로 서명을 검증합니다 — 네트워크 홉도, 요청마다 원격 확인도 필요 없으며, 키 순환 시 24시간의 유효 기간 중첩이 적용됩니다.

자격 증명 브로커

연결된 모든 외부 서비스에 대한 최종 사용자별 OAuth 토큰이 테넌트별로 격리되어 관리되며, 여러분의 서버에는 범위가 한정된 JWT 형태로만 노출됩니다.

PKCE가 강제되는 OAuth

모든 authorization-code 흐름은 처음부터 끝까지 PKCE로 보호되어, 퍼블릭 클라이언트와 모바일 클라이언트 모두에서 일반 OAuth가 남기는 가로채기 취약점을 막습니다.

저장 시 봉투 암호화

외부 토큰은 디스크에 기록되기 전에 AES-256-GCM 봉투 암호화로 감싸집니다 — 키는 브로커만 보유하며, 여러분의 애플리케이션은 절대 갖지 않습니다.

Argon2id 비밀번호 해싱

플랫폼 계층과 관리자 자격 증명은 메모리 하드니스에 맞춰 튜닝된 Argon2id로 해싱됩니다 — 대부분의 자체 구축 인증이 여전히 사용하는, GPU로 쉽게 크래킹되는 빠른 해시가 아닙니다.

연결이 중개되는 방식

"연결" 클릭부터 검증된 요청까지, 하나의 흐름으로.

중개 루프

01

시작사용자가 앱 안에서 "연결"을 클릭하면, 요청에는 계층(어느 최종 사용자, 어느 조직인지)과 외부 서비스가 함께 담깁니다.

02

리디렉션Auth Manager가 PKCE로 보호된 인가 URL을 생성하고 외부 서비스 자체의 로그인 및 동의 화면으로 리디렉션합니다.

03

승인사용자는 외부 서비스 자체 화면에서 접근을 승인합니다 — Auth Manager도, 여러분의 앱도 그 비밀번호를 절대 보지 못합니다.

04

교환반환된 코드는 검증된 PKCE code_verifier와 함께 토큰으로 교환됩니다. 전송 과정에서 여러분의 서버는 전혀 관여하지 않습니다.

05

암호화 및 저장액세스 토큰과 리프레시 토큰은 AES-256-GCM 봉투 암호화로 감싸져 해당 최종 사용자의 격리된 레코드 아래에 저장됩니다.

06

발급여러분의 앱은 그 연결에 한정된, 15분짜리 단명 RS256 JWT를 받습니다 — 왕복 호출 없이 JWKS를 통해 로컬로 검증할 수 있습니다.

07

투명한 갱신JWT 만료가 가까워지거나 상위 토큰 갱신이 필요해지면, 브로커가 호출 앱을 중단시키지 않고 둘 다 갱신합니다.

API 서페이스

로그인, 아이덴티티, 토큰 — 하나의 서페이스로.

POST/api/v1/users/login최종 사용자를 인증하고 단명 JWT 발급
POST/api/v1/orgs/:org_name/users/register조직 내 신규 사용자 셀프 등록 (요청 제한 적용)
POST/api/v1/users/refresh리프레시 토큰으로 새 액세스 토큰 발급
GET/api/v1/users/me/identities현재 사용자에 연결된 소셜 아이덴티티 목록 조회
DELETE/api/v1/users/me/identities/:id사용자 계정에서 소셜 아이덴티티 연결 해제
GET/api/v1/social/providers앱에 활성화된 소셜 로그인 제공자 조회
GET/oauth/authorizeOAuth 2.0 authorization-code 흐름 시작
POST/oauth/tokenauthorization code 또는 client credentials를 토큰으로 교환
GET/.well-known/jwks.json로컬 JWT 검증용 공개 키
보장 사항

탈취된 요청이 탈취된 신원이 되지 않도록 설계했습니다.

토큰은 여러분의 서버에 도달하지 않습니다외부 OAuth 토큰은 오직 브로커의 암호화된 저장소 안에만 존재합니다. 여러분이 보는 것은 범위가 한정된 JWT뿐, 그 아래의 자격 증명은 절대 보이지 않습니다.

저장 시 봉투 암호화AES-256-GCM, 테넌트별 키, 보호 대상 데이터와 독립적으로 순환됩니다.

Argon2id 비밀번호 해싱모든 플랫폼 계층 자격 증명에 대해 GPU 크래킹에 맞서 튜닝된 메모리 하드 해싱을 적용합니다.

단명하며 로컬로 검증됨15분짜리 RS256 JWT를 왕복 호출 없이 JWKS로 확인합니다 — 유출된 토큰은 이미 만료된 상태나 다름없습니다.

PKCE가 강제되는 흐름모든 authorization-code 교환에는 verifier가 필요하므로, 탈취된 리디렉션만으로는 로그인이 완료되지 않습니다.

테넌트 및 자격 증명 격리4계층 스코핑으로 한 조직의 토큰이 다른 조직의 요청 경로에 절대 들어가지 못하며, 모든 발급이 감사됩니다.

실전 사례

더 이상 여러분의 문제가 아닌 신원 문제들.

한 번 연결하면, 영원히 갱신

사용자가 캘린더를 한 번 연결하면 6개월 후에도 모든 호출이 계속 작동합니다 — 브로커가 앱이 눈치채지 못하게 수십 번 토큰을 갱신했기 때문입니다.

퇴사한 사용자

관리자가 한 사용자의 연결을 취소하면 그 사용자의 암호화된 토큰은 즉시 파기되지만, 다른 모든 테넌트의 연결은 영향 없이 계속 작동합니다.

네트워크 호출 없이 검증

API 게이트웨이는 요청의 RS256 서명을 캐시된 JWKS 키로 마이크로초 단위에 확인합니다 — 핫 패스에서 Auth Manager로의 회신 호출이 없습니다.

회전된 서명 키

Auth Manager가 서명 키를 회전시켜도 이전 공개 키와 새 공개 키 모두 JWKS에서 24시간 동안 유효하게 유지되어, 이미 진행 중이던 요청은 하나도 깨지지 않습니다.

하나의 로그인, 네 개의 계층

관리자, 조직, 애플리케이션, 최종 사용자는 모두 같은 4계층 체계로 인증하며, 이론적으로도 실제로도 자신의 범위를 벗어나 행동할 수 없습니다.

여러분의 신원 모델을 가져오세요. 나머지는 저희가 중개하겠습니다.

4계층 로그인부터 사용자별 OAuth 자격 증명까지 — Auth Manager가 신뢰 경계 전체를 책임지므로, 토큰이 여러분의 서버에 머무는 일은 없습니다.