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

This commit is contained in:
2026-06-22 16:52:36 +09:00
parent db54d3921e
commit ad23345001

View File

@@ -456,6 +456,16 @@ Redis 대기 상태 예시:
} }
``` ```
여기서 `sessionJwt`는 Backend가 임의로 새로 만든 토큰으로 이해하면 안 된다. 링크/코드 기반 흐름에서는 Backend가 Kratos에 코드 검증 또는 세션 발급을 요청하고, Kratos가 반환한 `session_token`을 Backend가 `sessionJwt`라는 응답 필드명으로 UserFront에 전달한다.
정리하면 다음과 같다.
```text
토큰 발급 주체: Kratos
토큰 전달 주체: Baron Backend
UserFront 응답 필드명: sessionJwt
```
### 5.4 흐름도 ### 5.4 흐름도
```mermaid ```mermaid
@@ -467,7 +477,10 @@ sequenceDiagram
participant GW as Baron Gateway Nginx participant GW as Baron Gateway Nginx
participant BE as Baron Backend participant BE as Baron Backend
participant Redis as Redis participant Redis as Redis
participant KA as Ory Kratos/Admin
participant KR as Ory Kratos/Courier participant KR as Ory Kratos/Courier
participant HY as Ory Hydra
participant RP as RP/업무시스템
participant Channel as Email/SMS participant Channel as Email/SMS
participant Approver as 링크 승인 기기 participant Approver as 링크 승인 기기
@@ -475,7 +488,9 @@ sequenceDiagram
UF->>L7: POST /api/v1/auth/enchanted-link/init UF->>L7: POST /api/v1/auth/enchanted-link/init
L7->>GW: API 요청 전달 L7->>GW: API 요청 전달
GW->>BE: init 요청 GW->>BE: init 요청
BE->>BE: 사용자 존재 여부 확인, 전화번호 정규화 BE->>BE: 입력값 정리 및 전화번호 정규화
BE->>KA: IdpProvider.UserExists(loginId)로 identity 조회
KA-->>BE: 사용자 존재 여부 반환
BE->>KR: 링크/코드 로그인 시작 BE->>KR: 링크/코드 로그인 시작
BE->>Redis: pendingRef 상태 저장(status=pending) BE->>Redis: pendingRef 상태 저장(status=pending)
KR-->>Channel: 로그인 링크 또는 코드 발송 KR-->>Channel: 로그인 링크 또는 코드 발송
@@ -491,9 +506,26 @@ sequenceDiagram
Approver->>BE: POST /api/v1/auth/magic-link/verify 또는 /login/code/verify Approver->>BE: POST /api/v1/auth/magic-link/verify 또는 /login/code/verify
BE->>Redis: pendingRef 승인 처리(status=approved/success) BE->>Redis: pendingRef 승인 처리(status=approved/success)
UF->>BE: poll 재시도 UF->>BE: poll 재시도
BE-->>UF: sessionJwt BE->>KR: Kratos 코드 검증/세션 발급 요청
KR-->>BE: Kratos session_token 반환
BE->>Redis: session_token을 pendingRef 성공 상태에 저장
alt RP OIDC 로그인 요청(login_challenge 있음)
BE->>HY: AcceptLoginRequest(login_challenge, subject)
HY-->>BE: redirectTo 반환
BE-->>UF: sessionJwt + redirectTo
UF->>RP: redirectTo 따라 RP callback 이동(code 포함)
RP->>HY: /oauth2/token에서 authorization code 교환
HY-->>RP: access_token, id_token, refresh_token 발급
else UserFront 일반 로그인(login_challenge 없음)
BE-->>UF: sessionJwt 필드로 Kratos session_token 전달
end
``` ```
위 그림의 마지막 단계는 두 가지로 나뉜다.
- RP에서 시작된 OIDC 로그인이라면 `login_challenge`가 있으므로 Backend가 Hydra에 `AcceptLoginRequest`를 호출하고, RP는 최종적으로 Hydra에서 `access_token`, `id_token`, `refresh_token`을 받는다.
- Baron UserFront 자체 로그인이라면 `login_challenge`가 없으므로 Hydra 후속 단계 없이 Kratos `session_token``sessionJwt`로 받아 로그인 완료된다.
### 5.5 보안상 설명 포인트 ### 5.5 보안상 설명 포인트
로그인 링크는 비밀번호를 입력하지 않아 편리하지만, 링크를 받은 사람이 곧 승인자가 된다. 따라서 운영 설명 시 다음 통제가 필요하다. 로그인 링크는 비밀번호를 입력하지 않아 편리하지만, 링크를 받은 사람이 곧 승인자가 된다. 따라서 운영 설명 시 다음 통제가 필요하다.