# 함수 명세: `authenticateMcpBearer` (#617)

> **상태**: Implemented · 구현: `DdsMcpBearerAuthenticator`

## 책임

MCP Tool 요청의 opaque Bearer를 활성 `CB_APP_USER`로 해석하고 해당 사용자의 provisioning된 local DDS principal을 반환한다. OCI IAM client-credentials token을 업무 사용자 token으로 해석하지 않는다.

## 입력과 출력

- 입력: `Authorization: Bearer <opaque-token>`
- 출력: `applicationUserId`, 표시 사용자명, `DDS_U_<id>`, data role 이름, lookup-key 참조

## 규칙

1. `CB_AGENT_BEARER_KEY`의 해시 일치, 만료·회수 여부와 `CB_APP_USER.active`를 매 Tool 요청마다 확인한다.
2. `CB_DDS_END_USER_MAP`에서 활성 local END USER provisioning 상태의 사용자 매핑을 반드시 찾는다.
3. 하나라도 없으면 `AUTHORIZATION_DENIED`로 끝내며 context attach 또는 보호 SQL을 호출하지 않는다.
4. raw bearer와 hash는 로그·MCP 응답에 노출하지 않는다.

## 주의

현재 opaque Bearer의 사용자 매핑이 DDS 집행 주체를 결정한다. 역할·퍼미션은 이 함수에서 복제하지 않고 보호 SQL의 runtime authorization predicate가 `CB_*` 권한 테이블을 읽어 집행한다. OCI IAM JWT의 사람 claim을 직접 사용하는 기능은 별도 OBO/authorization-code 확장이다.
