인증 API
앱 멤버(End User) 인증 엔드포인트입니다.
회원가입
POST /v1/public/app-members/signup
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
login_id | string | ✓ | 로그인 ID (앱 내 고유) |
password | string | ✓ | 비밀번호 |
nickname | string | ✗ | 표시명 (선택) |
curl -X POST "https://api.connectbase.world/v1/public/app-members/signup" \
-H "X-Public-Key: cb_pk_your_public_key" \
-H "Content-Type: application/json" \
-d '{
"login_id": "myuser123",
"password": "password123!",
"nickname": "홍길동"
}'응답:
{
"member_id": "member_abc",
"nickname": "홍길동",
"access_token": "eyJhbGciOi...",
"refresh_token": "eyJhbGciOi..."
}로그인
POST /v1/public/app-members/signin
curl -X POST "https://api.connectbase.world/v1/public/app-members/signin" \
-H "X-Public-Key: cb_pk_your_public_key" \
-H "Content-Type: application/json" \
-d '{
"login_id": "myuser123",
"password": "password123!"
}'응답: 회원가입과 동일한 형태(member_id, nickname, access_token, refresh_token).
게스트 멤버 가입
POST /v1/public/app-members
회원가입 없이 익명 토큰을 발급받습니다.
curl -X POST "https://api.connectbase.world/v1/public/app-members" \
-H "X-Public-Key: cb_pk_your_public_key"응답:
{
"member_id": "guest_xxx",
"access_token": "eyJhbGciOi...",
"refresh_token": "eyJhbGciOi..."
}내 정보 조회
GET /v1/public/app-members/me
⚠️ JWT (
Authorization: Bearer) 인증 필수.
curl -X GET "https://api.connectbase.world/v1/public/app-members/me" \
-H "Authorization: Bearer access_token_here"응답:
{
"member_id": "member_abc",
"nickname": "홍길동",
"is_active": true,
"custom_data": { "role": "admin" }
}custom_data 수정
PATCH /v1/public/app-members/me/custom-data
⚠️ JWT 인증 필수. PATCH 방식으로 머지되며, 값을
null로 설정하면 해당 키가 삭제됩니다.
curl -X PATCH "https://api.connectbase.world/v1/public/app-members/me/custom-data" \
-H "Authorization: Bearer access_token_here" \
-H "Content-Type: application/json" \
-d '{
"custom_data": { "role": "admin", "level": 5 }
}'응답:
{
"member_id": "member_abc",
"custom_data": { "role": "admin", "level": 5 }
}로그아웃
콘솔 사용자(/v1/auth/...) 와 앱 멤버(/v1/public/app-members/...) 는 별도 엔드포인트를 사용합니다.
콘솔 사용자
POST /v1/auth/logout
⚠️ refresh_token 으로 인증 합니다 (access_token 아님).
Authorization: Bearer <refresh_token>헤더 필요. SDK의 콘솔 인증 모듈이 호출합니다.
curl -X POST "https://api.connectbase.world/v1/auth/logout" \
-H "Authorization: Bearer refresh_token_here"별칭 GET /v1/auth/logout 도 일부 호환성 시나리오용으로 존재합니다.
앱 멤버
POST /v1/public/app-members/signout
SDK 의
cb.auth.signOut()이 이 엔드포인트를 호출합니다. access_token 으로 인증.
curl -X POST "https://api.connectbase.world/v1/public/app-members/signout" \
-H "X-Public-Key: cb_pk_..." \
-H "Authorization: Bearer access_token_here"토큰 재발급
POST /v1/auth/re-issue
refresh_token 으로 새 access_token 을 발급받습니다.
curl -X POST "https://api.connectbase.world/v1/auth/re-issue" \
-H "Authorization: Bearer refresh_token_here"응답:
{
"access_token": "eyJhbGciOi...",
"refresh_token": "eyJhbGciOi..."
}SDK 사용 시
onTokenRefresh콜백이 자동으로 이 흐름을 처리합니다. 자세한 내용은 인증 설정 을 참고하세요.
OAuth 2.0 / OIDC 표준 엔드포인트
ConnectBase 는 앱간 OAuth 연동 을 위해 OAuth 2.0 / OIDC 표준 엔드포인트를 제공합니다. 한 앱이 Provider 가 되어 다른 앱(Consumer)에게 capability(scope) 를 노출하고, Consumer 는 발급된 토큰으로 Provider 의 보호된 자원 / 함수를 호출할 수 있습니다.
Discovery
| Method | Path | RFC |
|---|---|---|
| GET | /.well-known/oauth-authorization-server | RFC 8414 |
| GET | /.well-known/openid-configuration | OIDC Core |
| GET | /.well-known/jwks.json | RFC 7517 |
인증 / 토큰
| Method | Path | RFC | 설명 |
|---|---|---|---|
| GET | /oauth/authorize | RFC 6749 §4.1 | Authorization Code (SPA 동의 화면) |
| POST | /oauth/par | RFC 9126 | Pushed Authorization Request (request_uri) |
| POST | /oauth/token | RFC 6749 | client_credentials / authorization_code / refresh_token grant |
| POST | /oauth/introspect | RFC 7662 | 토큰 검증 |
| POST | /oauth/revoke | RFC 7009 | 토큰 폐기 |
| GET | /oauth/userinfo | OIDC Core | UserInfo (Consumer redirect_uri origin CORS 허용) |
| GET | /oauth/end-session | OIDC RP-Initiated Logout | Back-channel Logout |
📌 모든
/oauth/*엔드포인트는 production 에서 HTTPS 만 허용 (EnforceHTTPS미들웨어). 또한/oauth/*표준 endpoint 는 server-to-server 호출이므로 CSRF 검사에서 면제됩니다 (Origin헤더 없는 호출 허용).
운영 필수 환경 변수:
OAUTH_RSA_PRIVATE_KEY_PEM(서명 키). 미주입 시/oauth/token이 5xx 를 반환하고/.well-known/jwks.json이 빈 배열을 반환합니다.
DPoP (RFC 9449)
Public client 보안을 위해 토큰 발급 시 DPoP 헤더로 proof-of-possession 을 동봉할 수 있습니다. 토큰 응답의 cnf.jkt 가 client 의 JWK thumbprint 와 일치해야 자원 서버에서도 통과합니다. 표준 에러 코드: invalid_dpop_proof, use_dpop_nonce.
Consumer Cross-App End-User Login (SPA)
Consumer 앱의 SPA Consent 화면(/oauth/authorize) 이 Provider 의 social login 옵션을 다음 엔드포인트로 받아 사용자에게 노출합니다.
| Method | Path | 설명 |
|---|---|---|
| GET | /v1/public/oauth/clients/:client_id/login-options | Provider 가 활성화한 social provider 목록 (공개) |
| GET | /v1/public/oauth/clients/:client_id/social-login-url | 선택한 provider 의 social login URL (공개) |
| GET/POST | /v1/public/oauth/:provider/callback | Provider 의 social provider 콜백 |
| POST | /v1/auth/oauth/exchange | 1회용 code → 토큰 교환 (cross-pod 안전 흐름) |
Consent / 사용자 마이페이지
| Method | Path | 인증 | 설명 |
|---|---|---|---|
| GET | /v1/oauth/consent/info | 앱 멤버 JWT | 동의 정보 조회 |
| POST | /v1/oauth/consent/approve | 앱 멤버 JWT | 동의 |
| POST | /v1/oauth/consent/deny | 앱 멤버 JWT | 거부 |
| GET | /v1/account/oauth/connections | 앱 멤버 JWT | 내 연결된 Consumer 목록 |
| DELETE | /v1/account/oauth/connections/:consent_id | 앱 멤버 JWT | 연결 해제 |
OAuth Webhook (Provider 이벤트 발송)
Provider 가 발생시키는 도메인 이벤트(예: order.created) 는 Consumer 가 등록한 카탈로그(/v1/integrations/providers/:provider_app_id/event-catalog) 의 event_type 을 따릅니다. 발송 시 X-ConnectBase-Signature + Idempotency-Key 헤더 포함, 재시도 / cleanup / dashboard 가 운영 ready 상태입니다 (2026-05-07).