2.7 KiB
2.7 KiB
HMM 백오피스 MCP 사용자 Bearer 검증 보고서
- 일자: 2026-07-23
- Redmine: #712
- 브랜치:
hmm-backoffice - 서비스:
https://hmm-backoffice.cloud-handson.com/mcp
원인
백오피스에서 발급한 vpd_live_* 직원 토큰을 별도 호환 서버인
https://hmm-mcp.cloud-handson.com/mcp에 보냈다. 이 서버의 Nginx는 운영 공용
HMM_MCP_BEARER_TOKEN 한 개만 비교하므로, 직원 토큰에서 Bearer 문자열을 제거해도 HTTP 401이
정상이다.
직원 토큰용 주소는 https://hmm-backoffice.cloud-handson.com/mcp다. 조사 시 이 경로는 MCP 도구를
제공했지만 Authorization 값을 실제로 검증하지 않고 버리는 결함도 확인됐다.
수정
- 모든 MCP method에서
HMM_ACCESS_BEARER_TOKENS의 SHA-256 해시, 만료, 회수, 직원 재직 상태 검증 - 누락·무효·만료·회수 토큰은 HTTP 401
- Tool 호출 connection에서
HMM_ACCESS_CTX_PKG.SET_USER_BY_BEARER실행 - 같은 connection에서
DBMS_CLOUD_AI_AGENT.RUN_TOOL실행 - 성공·실패와 무관하게
finally에서HMM_ACCESS_CTX_PKG.CLEAR_USER - Agent Factory 표시 주소를 백오피스 MCP 주소로 수정
- 공용 gateway와 직원 VPD endpoint의 주소·토큰 조합을 운영 문서에서 분리
토큰 원문은 Controller에서 Bearer 접두어만 제거해 전달하며 로그·응답·DB에 기록하지 않는다.
DB에는 기존 SHA-256 해시와 식별용 prefix만 남는다.
검증
| 항목 | 결과 |
|---|---|
| Maven 자동 테스트 | 107건 통과 |
| 같은 JDBC connection의 context 설정·Tool 실행·context 정리 | 단위 테스트 통과 |
| 운영 JAR SHA-256 | 로컬 검증 빌드와 일치 |
| 서비스 | vpd-backoffice.service active |
| 로그인 상태 | HTTP 200 |
| 무토큰 MCP | HTTP 401 |
| 활성 E1002 임시 토큰 initialize | HTTP 200 |
| 활성 E1002 임시 토큰 tools/list | HTTP 200 |
| Tool discovery | HMM Tool 3개 |
resolve_hr_term Tool 호출 |
HTTP 200 / MCP result 성공 |
| 회수 후 같은 토큰 | HTTP 401 |
검증용 토큰은 백오피스의 정상 발급 흐름으로 만들고 원문을 출력하지 않았다. 검증 완료 시 즉시 회수했으며, 이전 실패 과정에서 남은 같은 용도의 임시 토큰 한 건도 함께 회수했다.
Agent Factory 최종 입력
| 항목 | 값 |
|---|---|
| Server name | hmm-backoffice-mcp |
| Server URL | https://hmm-backoffice.cloud-handson.com/mcp |
| Authentication mode | Bearer Token |
| Bearer token | 백오피스 발급 토큰 원문만 입력 |
Token 입력란에 Bearer 접두어를 직접 쓰지 않는다. Agent Factory가 HTTP
Authorization: Bearer <token> 헤더를 조립한다. OAuth URL과 client ID/secret은 사용하지 않는다.