# tdc114plus 외부 API 사용 및 앱 내 활용 정리 작성일: 2026-07-03 최종 개정일: 2026-07-20 상태: v3.4 목적: `tdc114plus` 앱이 Baron SSO가 이미 제공하는 API를 어떤 원칙으로 직접 소비해야 하는지, 그리고 어떤 인증값이 앱에 들어가면 안 되는지 정리한다. 상위 기준 문서: - `docs/00_policy_tdc114plus_development_2026-07-02.md` - `docs/00_contract_tdc114plus_api_2026-07-02.md` ## 1. 한 줄 결론 - 신규 앱은 Baron SSO에 추가되는 별도 `RP`다. - Baron SSO 원본에 신규앱 전용 `/api/v1/tdc114plus/...` API를 추가하지 않는다는 현재 기준을 따른다. - 단, 앱 비밀값 보호와 모바일 세션 유지를 위해 `tdc114plus-auth` 중계서버는 별도 운영한다. - 앱은 Baron SSO/조직도 사이트가 이미 제공하는 공식 API를 직접 소비하는 클라이언트다. - 다만 앱에 넣으면 안 되는 운영 Key나 비밀값은 계속 서버/운영자 전용으로 본다. - 현재 코드에 남아 있는 `tdc114plus` 전용 API 가정은 레거시 흔적으로 보고, 기능 보존 테스트를 동반해 점진 제거한다. ## 2. 현재 API 계층 해석 2026-07-08 기준 현재 해석은 아래와 같다. | 계층 | 호출 주체 | 용도 | 비고 | | --- | --- | --- | --- | | Baron 공개/기존 API | Flutter 앱 | 조직도, 조직/사용자 데이터 조회 | Swagger에 노출된 endpoint 기준으로 재확인 필요 | | Baron 로그인/웹 절차 | Flutter 앱 + 사용자 브라우저/링크 | RP 로그인, 승인 링크 처리 | Hosted Login + PKCE 원칙 | | 운영 Key 기반 외부 연동 API | 운영 서버 또는 운영자 | 원본 데이터 조회 또는 관리자성 연동 | 모바일 앱 직접 탑재 금지 | 정리하면, Flutter 앱은 Baron SSO 원본에 신규앱 전용 API를 새로 요구하지 않는다. 대신 앱에 노출되면 안 되는 key/secret, Baron SSO 링크 로그인 중계, 앱 세션 JWT, 프로필 이미지 lookup은 `tdc114plus-auth`가 맡는다. ## 3. 신규 앱의 인증 해석 - `tdc114plus`는 Baron SSO에 추가되는 별도 `RP(Relying Party)`다. - 앱 로그인은 Baron SSO의 RP 로그인 절차 일부다. - 기본 인증 방식은 `Baron SSO Hosted Login + OIDC Authorization Code + PKCE`다. - 흐름은 `앱 -> Baron SSO 인증 URL 열기 -> Hosted Login 화면에서 휴대폰번호 입력 -> 문자/메일 링크 인증 -> App Link callback -> token 교환 -> 앱 로그인 완료`다. - 앱은 승인 링크를 직접 만들지 않고, 휴대폰번호/인증정보도 직접 처리하지 않는다. - Swagger의 `phone-login`, `headless`, `enchanted-link`, `sms`, `qr` 계열 Auth API는 Baron SSO Hosted Login 화면과 서버 내부 구현의 참고 대상이다. - Flutter 앱 기본 구현은 위 Auth API를 직접 조합하지 않고, OIDC authorization endpoint와 token endpoint를 사용한다. - 로그인 성공 후 Baron SSO가 조직도 API 호출에 필요한 연동 키 묶음을 전달하면 앱은 이를 선택적 세션 값으로 받아 사용할 준비를 한다. - 해당 기능이 Baron SSO에 구현되기 전까지는 staging `org-context` 검증을 위해 로컬 비추적 env/Dart define의 고정 키 fallback을 사용한다. 2026-07-20 현재 로컬 실기기 검증 흐름에서는 모바일 앱이 Baron SSO 원본을 직접 호출하지 않고 `tdc114plus-auth`의 아래 중계 API를 호출한다. ```http POST /api/v1/auth/link/init POST /api/v1/auth/link/poll GET /api/v1/integrations/org-context GET /api/v1/profile-image ``` 위 API는 Baron SSO 원본에 새로 추가한 신규앱 API가 아니라, 신규앱 전용 중계서버 `tdc114plus-auth`의 API다. ## 4. 앱이 실제로 호출할 인증 API 현재 저장소 코드에는 아래 레거시 경로 가정이 남아 있거나 제거 대상이다. ```http POST /api/v1/auth/headless/phone-login POST /api/v1/auth/headless/link/poll POST /api/v1/tdc114plus/auth/phone-login ``` 하지만 2026-07-08 사용자 확인 기준으로 `tdc114plus 앱 전용 API는 없다`. 따라서 위 경로들 중 legacy `POST /api/v1/tdc114plus/auth/phone-login`을 포함한 레거시 표기는 `확정 계약`이 아니라 `기존 로컬/가정 기반 경로`로 격하한다. 처리 원칙: 1. 먼저 Swagger에서 대응 endpoint를 찾는다. 2. 그 다음 앱 DTO/repository를 대체 계약으로 맞춘다. 3. mock/real 테스트와 실제 화면 검증이 끝난 뒤에만 옛 경로를 제거한다. 현재 확정 사실: - 신규 앱의 기본 로그인 정책은 Hosted Login + PKCE다. - 사용자가 링크를 클릭해야 앱 로그인이 완료된다는 정책은 유지한다. - 다만 링크 발송/승인 처리는 앱이 직접 headless API로 수행하지 않고 Baron SSO Hosted Login 화면과 서버 내부 구현에 맡긴다. - Swagger에 `POST /api/v1/auth/phone-login` 또는 `POST /api/v1/auth/headless/phone-login`이 보이더라도, 앱의 기본 로그인 버튼은 이 API를 직접 호출하지 않는다. ## 5. 팀장 전달 외부 API 정보의 위치 현재 저장소 기준으로 팀장 전달 정보와 직접 연결되는 외부 연동 대상은 아래 API다. ```http GET https://sadmin.hmac.kr/api/v1/integrations/org-context X-Baron-Key-ID: {KEY_ID} X-Baron-Key-Secret: {KEY_SECRET} ``` 참고: - Swagger UI: `https://sadmin.hmac.kr/api/docs#/Integrations/get_api_v1_integrations_org_context` - OpenAPI: `https://sadmin.hmac.kr/api/openapi.yaml` - 로컬 참고 문서: `docs/guide_baron_org_context_api_reference_2026-07-03.md` 중요 해석: - 이 API는 앱 화면을 구성할 때 참고해야 하는 원본/공식 문서 계층이다. - 장기적으로는 로그인 성공 후 Baron SSO가 내려주는 조직도 API 연동 키를 사용한다. - 단기적으로는 Baron SSO의 키 전달 기능이 아직 미개발이므로, 개발/검증용 staging 고정 키를 로컬 비추적 env/Dart define에만 둔다. - tracked 문서, tracked 소스, 운영 APK 기본값에는 `X-Baron-Key-ID`, `X-Baron-Key-Secret` 실제 값을 넣지 않는다. ## 6. 앱이 실제로 호출하는 데이터 API 현재 저장소 코드에는 아래 레거시 데이터 경로 가정이 남아 있다. ```http GET /api/v1/tdc114plus/directory/employees GET /api/v1/tdc114plus/directory/employees/{employeeId} GET /api/v1/tdc114plus/organization/tenants GET /api/v1/tdc114plus/organization/orgchart ``` 하지만 이 역시 `확정 계약`으로 보지 않는다. 현재 확인된 근거: - `sadmin.hmac.kr`는 org-context 참고 host이지 `tdc114plus` 앱 route host는 아니다. - `sorg.hmac.kr/login?returnTo=%2Fchart`는 웹 로그인 진입 주소이며 JSON API가 아니라 HTML 응답을 돌려준다. - Swagger 화면에는 `Public /api/v1/public/orgchart` 같은 조직도 관련 공개 API 흔적이 보인다. 따라서 앞으로의 기준은 아래와 같다. 1. 조직도/가족사/사용자 조회는 Swagger에 실제로 존재하는 `integrations/org-context`, `public/orgchart` 기준으로 다시 잡는다. 2. 현재 코드의 `/api/v1/tdc114plus/...` 경로는 전면 재확정 대상이다. 3. 정확한 path, query, 응답 스키마가 확인되기 전에는 코드 경로를 확정 표현으로 문서화하지 않는다. 4. 레거시 경로 정리는 `유지`, `교체`, `제거` 분류표를 먼저 만든 뒤 순차적으로 수행한다. ## 7. 원본 외부 API와 앱 기능의 연결 | 원본 정보 | 앱 또는 중간 가공 결과 | 앱 기능 | | --- | --- | --- | | 조직 트리 | `org-context` 또는 공개 `orgchart` 응답을 앱 내부 모델로 매핑 | 회사/조직 구조 표시 | | 조직 목록 | 상단 칩용 tenant/company 모델 | 상단 필터 칩 | | 조직 구성원 | 직원 목록/상세용 앱 모델 | 직원검색, 상세 | | 사용자 전화번호 | `phoneNumber`, `phoneDisplay` | 전화/문자 실행 | | 사용자 이메일/직급/직위/직무 | 동일 또는 유사 필드 | 상세 정보 표시 | 즉, 앱은 Swagger에 드러나는 원본/공개 응답을 앱 화면용 모델로 직접 매핑하는 구조로 전환될 수 있다. ## 8. 환경변수 및 보안 원칙 앱 측 런타임 값: - `SSO_BASE_URL` - `TDC114_API_BASE` - `APP_VERSION` 서버 측 외부 API 연동 값 예시: ```env TDC114PLUS_ORG_CONTEXT_BASE_URL=https://sadmin.hmac.kr TDC114PLUS_ORG_CONTEXT_KEY_ID= TDC114PLUS_ORG_CONTEXT_KEY_SECRET= TDC114PLUS_ORG_CONTEXT_TENANT_SLUG=hanmac-family TDC114PLUS_ORG_CONTEXT_INCLUDE_USERS=true TDC114PLUS_ORG_CONTEXT_INCLUDE_USER_IDS=true ``` 추가 메모: - 2026-07-10 기준 팀장 지시에 따라 원본 Baron API 기준 host는 `https://sadmin.hmac.kr/`를 사용한다. - 팀장 전달 운영 키(`CLIENT ID`, `X-Baron-Key-Secret`)는 로컬 비추적 env에만 반영하고 tracked 문서에는 직접 기록하지 않는다. - 실제 배포 전까지 신규앱에서 사용하는 Baron SSO API 참고 기준은 staging Swagger `https://sadmin.hmac.kr/api/docs#/`다. 보안 원칙: - `X-Baron-Key-ID`, `X-Baron-Key-Secret` 실제 값은 tracked 앱 소스와 tracked 문서에 넣지 않는다. - 개발/검증 중 Baron SSO가 키 전달 기능을 제공하기 전까지는 비추적 env/Dart define fallback으로만 제한 사용한다. - 운영 APK에서는 로그인 성공 후 받은 세션 기반 연동 키 또는 별도 안전한 서버 중계 방식으로 전환한다. - 앱에는 공개 가능한 RP Client ID, issuer, redirect URI 같은 공개 설정만 기본값으로 둔다. - RP 비밀값, 승인 링크 생성용 내부 인증정보, 외부 API Key는 모두 서버 전용이다. - 앱이 저장하는 세션 정보는 운영 전 안전한 저장소 적용 여부를 재검토한다. ## 9. 팀 공유용 핵심 메시지 1. `tdc114plus`는 Baron SSO의 별도 RP다. 2. 로그인은 Baron SSO Hosted Login + PKCE 방식이며, Baron SSO 화면에서 휴대폰번호 입력 후 사용자가 문자/메일 링크를 클릭해야 앱 로그인이 완료된다. 3. 앱 전용 `tdc114plus` backend API는 없다는 현재 기준으로 재정렬한다. 4. 앱은 Baron이 이미 제공하는 Swagger 공개 API를 직접 소비하는 클라이언트 앱이다. 5. 운영 Key나 RP 비밀값은 모바일 앱과 저장소 tracked 파일에 두면 안 된다. ## 10. 현재 기준 주의사항 - `phone-login`은 개발용 fallback 경로일 뿐 기본 UX가 아니다. - 현재 코드에 남아 있는 `/api/v1/tdc114plus/...` path는 검증 전 가정일 수 있다. - 해당 가정 path 제거는 기능이 유지되는지 테스트한 뒤 단계적으로만 진행한다. - 실제 앱 구조는 `auth`, `directory`, `organization` feature별 repository 분리 기준으로 유지하되, endpoint는 Swagger 기준으로 다시 매핑해야 한다. - 실제 응답 정합성 검증 중이라, 세부 필드명과 사용 범위는 Swagger 기준으로 계속 재확인해야 한다.