3. Phase 1: 등록, 페어링 및 키 교환 (Registration & Lifecycle)
클라이언트와 마스터 서버가 상호 통신을 위한 토큰 페어(Access/Refresh)를 교환하고 검증하는 단계다.
3.1. 페어링 URL 발급 (Master Server)
- 형식:
https://{master_host}/v1/auth/pair?token={pairing_token} - 제약 조건:
pairing_token은 발급 후 15분 이내에 사용되지 않으면 반드시 폐기되어야 한다 (MUST).
3.2. 등록 주소 검증 규약 (Address Validation)
클라이언트가 제출하는 client_address에 대한 마스터 서버의 검증 규칙:
- Allowed Schemes:
https://사용 강제 (단, 명시적인 개발 플래그 활성화 시http://허용). - Loopback Forbidden:
127.0.0.1,localhost등 루프백 및 링크 로컬 주소는 등록을 거부해야 한다 (MUST). - Private Network:
192.168.x.x등 사설 IP는 허용된다.
3.3. 등록 요청 및 상호 키 교환 (Mutual Registration)
클라이언트는 등록 시 자신이 마스터 서버를 호출할 때 쓸 토큰을 발급받음과 동시에, 마스터 서버가 자신을 호출할 때 사용할 초기 토큰 페어를 생성하여 전달해야 한다 (MUST).
Endpoint: POST /v1/auth/pair (Master Server 제공)
Request (Client → Master):
{
"pairing_token": "String (필수, 최소 32자 이상)",
"client_address": "String (필수, 향후 마스터가 호출할 URI)",
"device_name": "String (필수, 최대 100자)",
"client_credentials": {
"access_token": "String (필수, 마스터가 클라이언트를 호출할 때 사용할 토큰)",
"refresh_token": "String (필수, 클라이언트용 갱신 토큰)",
"expires_in": "Number (필수, 초 단위)"
}
}
Response (Master → Client) (200 OK):
{
"access_token": "String (필수, 클라이언트가 마스터를 호출할 때 사용할 Bearer 토큰)",
"refresh_token": "String (필수, 마스터용 장기 갱신 토큰)",
"expires_in": "Number (필수)",
"server_credentials": "Object (필수, 서버 서명 및 자격 증명용 JWK 공개키)"
}
3.4. 토큰 갱신 엔드포인트 대칭 구현 (Token Refresh)
양측은 타 API 호출 시 401 Unauthorized를 받으면, 발급 주체의 갱신 엔드포인트를 호출하여 토큰을 갱신하고 원래 요청을 재시도해야 한다 (MUST).
3.4.1. 클라이언트의 마스터 토큰 갱신 (Client → Master)
- Endpoint:
POST /v1/auth/refresh(Master Server 제공) - Request:
{"refresh_token": "String (필수)"} - Response: §3.3의 Master → Client 응답 포맷과 동일.
3.4.2. 마스터의 클라이언트 토큰 갱신 (Master → Client)
- Endpoint:
POST /v1/auth/refresh(Local Client 제공) - Request:
{"refresh_token": "String (필수)"} - Response:
{
"access_token": "String (필수)",
"refresh_token": "String (필수)",
"expires_in": "Number (필수)"
}
3.5. 등록 해제 (Unregister)
클라이언트가 자발적으로 네트워크에서 이탈할 때 잔여 리소스를 정리한다.
- Endpoint:
DELETE /v1/nodes/self(Master Server 제공) - Headers:
Authorization: Bearer {client_access_token} - 제약 조건: 마스터 서버는 해당 클라이언트와 연결된 모든 WSS 세션을 즉시 강제 종료하고 상태를 정리해야 한다 (MUST). 관련된 모든 토큰은 즉시 무효화된다.
- Response:
204 No Content