Update Baron SSO 로그인 화면 3가지 방식 절차 및 흐름.md

This commit is contained in:
2026-06-22 14:43:36 +09:00
parent 927881f5ef
commit 8774df871b

View File

@@ -69,6 +69,61 @@ flowchart LR
## 4. 비밀번호 로그인 ## 4. 비밀번호 로그인
### 4.0 로그인 화면이 뜨기 전 순서
RP 화면에서 사용자가 로그인을 시도하면, 바로 비밀번호 검증이나 토큰 검증부터 하는 것이 아니다. 먼저 OIDC 인증 요청을 Baron SSO의 Hydra endpoint로 보낸다.
이때 Hydra가 확인하는 것은 주로 다음과 같다.
- `client_id`: 어떤 RP 시스템이 요청했는지
- `redirect_uri`: 로그인 후 돌아갈 주소가 등록된 주소인지
- `scope`: RP가 요청한 권한 범위
- `state`, `nonce`, `code_challenge`: OIDC/PKCE 흐름을 안전하게 이어가기 위한 값
- 기존 Baron SSO 로그인 세션 존재 여부
즉, 처음 `/oidc/oauth2/auth`로 들어온 요청은 "토큰 확인"이라기보다 "OIDC 로그인 요청 접수 및 검증"에 가깝다. 사용자가 아직 Baron SSO에 로그인되어 있지 않으면 Hydra는 `login_challenge`를 만들고, 사용자를 Baron SSO 로그인 화면(UserFront)으로 보낸다.
흐름을 로그인 화면 표시 전까지만 보면 다음과 같다.
```mermaid
sequenceDiagram
autonumber
actor User as 사용자
participant RP as RP/업무시스템
participant L7 as L7/Traefik
participant GW as Baron Gateway Nginx
participant OK as Oathkeeper
participant HY as Ory Hydra
participant UF as UserFront 로그인 화면
User->>RP: 업무시스템 접속
User->>RP: 로그인 버튼 클릭
RP-->>User: /oidc/oauth2/auth로 브라우저 리다이렉트
User->>L7: GET /oidc/oauth2/auth?client_id=...&redirect_uri=...
L7->>GW: 요청 전달
GW->>OK: /oidc/* 경로 전달
OK->>HY: strip_path 후 Hydra /oauth2/auth 전달
HY->>HY: client_id, redirect_uri, scope, state, PKCE 검증
alt 기존 Baron SSO 로그인 세션 없음
HY-->>User: login_challenge 포함 UserFront 로그인 화면으로 리다이렉트
User->>L7: UserFront 로그인 화면 요청
L7->>GW: 화면 요청 전달
GW->>UF: / 경로 UserFront로 전달
UF-->>User: 비밀번호/로그인 링크/QR 코드 화면 표시
else 기존 Baron SSO 로그인 세션 있음
HY-->>User: 로그인 화면 생략 또는 consent/redirect 단계로 진행
end
```
정리하면 다음 순서다.
1. 사용자가 RP에 접속한다.
2. RP가 `client_id` 등을 담아 Baron SSO의 `/oidc/oauth2/auth`로 브라우저를 보낸다.
3. 요청은 L7, Baron Gateway Nginx, Oathkeeper를 거쳐 Hydra로 간다.
4. Hydra는 RP 요청이 정상인지 확인하고, 기존 SSO 세션이 있는지 본다.
5. 로그인 세션이 없으면 `login_challenge`를 발급하고 UserFront 로그인 화면으로 보낸다.
6. 그 다음에야 사용자가 비밀번호/로그인 링크/QR 코드 중 하나를 선택한다.
### 4.1 사용자가 보는 절차 ### 4.1 사용자가 보는 절차
1. 사용자가 `비밀번호` 탭을 선택한다. 1. 사용자가 `비밀번호` 탭을 선택한다.
@@ -115,6 +170,10 @@ flowchart LR
### 4.4 흐름도 ### 4.4 흐름도
아래 흐름도는 "로그인 화면 표시 전 OIDC 요청 접수"와 "비밀번호 입력 후 세션 발급"을 한 번에 이어서 보여준다.
주의할 점은 4번의 `/oidc/* -> Hydra` 단계가 비밀번호나 access token을 검사하는 단계가 아니라는 것이다. 이 단계는 RP의 OIDC 인증 요청을 Hydra가 접수하고, `client_id``redirect_uri` 등을 확인한 뒤 `login_challenge`를 만들어 UserFront 로그인 화면으로 보내는 단계다.
```mermaid ```mermaid
sequenceDiagram sequenceDiagram
autonumber autonumber
@@ -122,16 +181,21 @@ sequenceDiagram
participant RP as RP/업무시스템 participant RP as RP/업무시스템
participant L7 as L7/Traefik participant L7 as L7/Traefik
participant GW as Baron Gateway Nginx participant GW as Baron Gateway Nginx
participant OK as Oathkeeper
participant UF as UserFront participant UF as UserFront
participant BE as Baron Backend participant BE as Baron Backend
participant KR as Ory Kratos participant KR as Ory Kratos
participant HY as Ory Hydra participant HY as Ory Hydra
User->>RP: 업무시스템 접속 User->>RP: 업무시스템 접속
RP->>L7: /oidc/oauth2/auth?client_id=... RP-->>User: /oidc/oauth2/auth?client_id=... 로 리다이렉트
User->>L7: GET /oidc/oauth2/auth?client_id=...
L7->>GW: OIDC 요청 전달 L7->>GW: OIDC 요청 전달
GW->>HY: /oidc/* -> Hydra GW->>OK: /oidc/* 경로 전달
HY-->>UF: login_challenge 포함 로그인 화면 이동 OK->>HY: Hydra /oauth2/auth 전달
HY->>HY: RP 요청 검증 및 login_challenge 생성
HY-->>User: UserFront 로그인 화면으로 리다이렉트
User->>UF: 로그인 화면 표시
User->>UF: 이메일/휴대폰 + 비밀번호 입력 User->>UF: 이메일/휴대폰 + 비밀번호 입력
UF->>L7: POST /api/v1/auth/password/login UF->>L7: POST /api/v1/auth/password/login
L7->>GW: API 요청 전달 L7->>GW: API 요청 전달
@@ -425,4 +489,3 @@ QR 코드는 "새 PC 화면에 임시 출입증을 띄우고, 이미 로그인
4. 링크/QR 방식 모두 `요청자 기기``승인자 기기`를 감사 로그에 분리 저장한다. 4. 링크/QR 방식 모두 `요청자 기기``승인자 기기`를 감사 로그에 분리 저장한다.
5. `내가 요청한 로그인이 아님`을 누르면 해당 pending 요청을 즉시 차단하고, 이미 발급된 세션 또는 refresh grant가 있으면 단계적으로 revoke한다. 5. `내가 요청한 로그인이 아님`을 누르면 해당 pending 요청을 즉시 차단하고, 이미 발급된 세션 또는 refresh grant가 있으면 단계적으로 revoke한다.
6. 내부 사용자는 Naver Works 같은 조직 채널 알림과 연동할 수 있지만, 외부 사용자는 이메일/패스키/TOTP 등 별도 신뢰 채널을 마련해야 한다. 6. 내부 사용자는 Naver Works 같은 조직 채널 알림과 연동할 수 있지만, 외부 사용자는 이메일/패스키/TOTP 등 별도 신뢰 채널을 마련해야 한다.