인증 개발 가이드라인
GitLab Authentication 팀이 소유하는 System Access 및 User Profile 기능 카테고리의 인증 개발 가이드라인과 보안 가드레일을 설명합니다.
Authentication 팀은 System Access 와 User Profile 두 가지 기능 카테고리를 담당합니다. 이 가이드는 해당 카테고리의 주요 주제, 참조 위치, 그리고 주의해야 할 사항을 다룹니다. GitLab의 인증 및 인가에 관한 심층적인 보안 지식은 Authentication & Authorization Security Knowledge Base (내부 문서)를 참조하세요. 요청 흐름 개요 # 모든 인증 흐름은 current_user 로 수렴됩니다: HTTP Request │ ▼ Rack Middleware (Labkit → Rack::Attack → Warden → CSRF) │ ├── Web Request ──► SessionsController / OmniauthCallbacks ──► Warden Strategies │ └── API Request ──► API::APIGuard ──► AuthFinders (token lookup) │ ▼ current_user API 요청의 경우, AuthFinders ( lib/gitlab/auth/auth_finders.rb )는 다음 순서로 인증 소스를 확인합니다: Deploy token Bearer token (job token, PAT, 또는 OAuth) Job token (헤더 또는 파라미터) Session fallback (웹에서 시작된 API 호출의 경우) 가드레일: AuthFinders 의 토큰 확인 순서를 변경하지 마세요. Deploy token, bearer token, job token, session은 특정 우선순위에 따라 확인됩니다. 순서를 변경하면 한 토큰 유형이 다른 토큰을 가릴 수 있습니다. 토큰 접두사 # 토큰 접두사를 사용하여 디버깅 및 코드 리뷰 중 토큰 유형을 식별합니다. 접두사 토큰 유형 저장 방식 glpat- Personal, project, 또는 group access token SHA-256 digest gldt- Deploy token AES-256-GCM 암호화 glcbt- CI job token AES-256-GCM 암호화 gloas- OAuth application secret SHA-512 digest 토큰 유형 및 저장 전략의 전체 목록은 Authentication & Authorization Security Knowledge Base (내부 문서)를 참조하세요. 로그인 및 세션 # 웹 로그인은 Devise와 Warden을 사용합니다. 설정은 config/initializers/8_devise.rb 에 있으며 ( 8_ 접두사는 로드 순서를 제어합니다). 참조 위치 목적 app/controllers/sessions_controller.rb 웹 로그인 및 로그아웃. config/initializers/warden.rb Warden 콜백, 세션 설정. app/models/active_session.rb Redis 세션 추적. app/controllers/admin/sessions_controller.rb A