OAuth, OIDC, SAML
security
2분 읽기OAuth, OIDC, SAML
OAuth
"이 앱이 내 정보 써도 돼?" 허락을 받는 규칙
- 로그인이 아님, 정보 접근 허락만
- 예: 카카오 정보 제공 동의
OIDC
OAuth + "이 사람이 누구인지" 확인 → 로그인
- OAuth 위에 신원 확인 기능을 얹은 것
- "카카오로 로그인"이 실제로는 OIDC
- 가볍고 현대적, JSON 기반
SAML
기업 내부 시스템용 인증 프로토콜
- XML 기반이라 무겁고 복잡
- 레거시 시스템 연동에 많이 씀
- 지금 프로젝트는 OIDC 사용 중
Keycloak OIDC 로그인 흐름 (Authorization Code Flow)
- 브라우저 → Keycloak "로그인할게"
- Keycloak → 브라우저 "로그인 됐어, 여기 code" (URL 콜백)
- 브라우저 → 서버 "나 이 code 받았어"
- 서버 → Keycloak "이 code로 토큰 줘"
- Keycloak → 서버 "여기 JWT 토큰"
- 서버 → 브라우저 "로그인 완료"
프로비저닝
SSO 로그인 후 해당 서비스에 유저가 없을 때 자동으로 계정을 만들어주는 것
흐름:
- SSO 로그인 → sid 발급
- Roundcube 같은 서비스 접속
- 해당 유저 있나 확인
- 없으면 → sid로 Keycloak에서 유저 정보 가져와서 자동 계정 생성
- 있으면 → 그냥 로그인
왜 토큰을 바로 안 주고 code를 먼저 주나
- 콜백이 브라우저 URL로 오는데 URL은 누구나 볼 수 있음
- 토큰을 URL에 직접 주면 노출 위험
- code는 임시 교환권, 서버가 code로 Keycloak한테 직접 토큰 요청
- 토큰은 서버 ↔ Keycloak 사이에서만 교환 (브라우저 안 거침)