Appearance
02 사전 설정
연동 개발 전에 멤버십과 주고받는 항목, 등록 규칙, 환경별 주소.
| 상태 | 확정 |
| 최종 확인 | 2026-09-23 |
환경과 주소
| stage (샌드박스) | prod | |
|---|---|---|
| 호스트 | https://stage-membership.m-box.com 개방 예정 | https://membership.m-box.com 개방 예정 |
| 디스커버리 | {호스트}/.well-known/openid-configuration | 같음 |
| 클라이언트 | 별도 발급 | 별도 발급 |
| 사용자 계정 | 발급 시 테스트 계정 제공. 자유 가입 가능 | 실사용자 |
redirect_uri | http://localhost:* 허용 | https만 |
| 데이터 | 주기적으로 초기화될 수 있음 | 보존 |
두 환경은 같은 코드가 돌고 데이터만 분리되어 있다. stage에서 05 점검 체크리스트를 통과한 뒤 prod 클라이언트를 발급받는다.
개방 시점
stage는 멤버십 인프라 작업(Redis·시크릿 주입) 완료 후 개방된다. 개방 전에는 06 샘플 클라이언트의 로컬 실행 절차로 멤버십 서버를 직접 띄워 개발할 수 있다 — 같은 코드다. 개방 시점은 담당자가 등록된 연락처로 안내한다.
클라이언트 발급
클라이언트 등록은 멤버십 담당자가 한다(셀프 서비스 콘솔 없음).
| 담당 | 머니박스 개발실 유원영 · yoo.wonyoung@m-box.com |
| 신청 방법 | 아래 신청 항목을 메일로 보낸다 |
| 소요 | 영업일 1일 이내 |
| 회신 | client_id · client_secret(1회) · 디스커버리 주소 · stage 테스트 계정 |
신청 항목
| 항목 | 필수 | 설명 | 예 |
|---|---|---|---|
| 서비스 | 필수 | 머니박스 / 레밋 / 핀모든 중 하나 | 레밋 |
| 클라이언트 용도 | 필수 | 웹 / iOS 앱 / Android 앱 / 관리자 등. 배포 단위마다 클라이언트 하나 | 웹 |
| 표시 이름 | 필수 | 로그인 화면 상단에 "○○에 로그인하는 중"으로 표시 | 레밋 |
| 로고 | 선택 | https 이미지 URL, 정방형, 96px 이상 | https://static.remit.example/logo.png |
redirect_uri (stage) | 필수 | 여러 개 가능. 아래 규칙 | http://localhost:3000/auth/callback, https://stage.remit.example/auth/callback |
redirect_uri (prod) | prod 신청 시 | https만 | https://www.remit.example/auth/callback |
| 담당자 | 필수 | 이름 · 이메일 · 휴대폰. 장애·키 회전·개방 안내를 받는 곳 | — |
같은 서비스의 클라이언트들은 같은 sub를 받는다. 웹과 앱을 따로 등록해도 회원 식별에는 영향이 없다.
발급받는 것
| 항목 | 설명 |
|---|---|
client_id | 서비스·용도를 담은 문자열. 예: remit-web, remit-ios |
client_secret | 43자 임의 문자열. 한 번만 전달되며 멤버십에도 원문이 남지 않는다. 분실 시 재발급 |
서비스 · sub 접두어 | 등록된 서비스와 그 접두어(레밋 rm_ / 핀모든 fm_ / 머니박스 mb_). 첫 로그인 때 받은 sub가 이 접두어인지 확인한다 |
| 디스커버리 주소 | 라이브러리 설정에 넣는 값 |
| stage 테스트 계정 2개 | ① 이메일 있는 계정, ② 이메일 없는 계정(이관 회원 재현용 — email 클레임이 빠진 ID 토큰을 받는다). 추가 계정은 stage 로그인 화면에서 자유 가입 |
| 로고 파일 | 머니박스 심볼 SVG·PNG — 로그인 버튼용(04 로그인 버튼) |
| 샘플 클라이언트 | 06에 전문이 실려 있어 저장소 접근이 없어도 실행 가능. 멤버십 저장소(로컬 서버 실행·최신 샘플) 읽기 권한이 필요하면 담당자에게 협력사 GitHub 계정 초대를 요청한다 |
클라이언트 시크릿
client_secret은 서버에만 둔다(환경변수·시크릿 저장소). 브라우저·앱 코드·저장소·이슈 트래커에 넣지 않는다. 노출이 확인되면 즉시 담당자에게 알려 폐기·재발급한다. 앱은 04 활용 › 앱의 경로(자사 백엔드 경유)로 토큰을 요청한다.
시크릿 재발급·회전
- 담당자에게 재발급을 요청한다(사유: 분실 / 노출 / 정기 회전).
- 새 시크릿이 발급되면 옛 시크릿은 24시간 동안 함께 유효하다.
- 그 안에 연동 서비스 설정을 새 값으로 바꾸고 배포한다.
- 24시간 후 옛 값은 자동 폐기된다. 이후 옛 값으로 토큰 요청 시
invalid_client.
리다이렉트 URI
인가 코드가 전달되는 연동 서비스 주소다. 멤버십은 등록된 값과 문자열이 정확히 일치하는 redirect_uri만 받는다. 쿼리스트링을 붙이지 않고 고정 경로를 쓴다.
| 규칙 | 이유 |
|---|---|
https 필수 (localhost·127.0.0.1만 http 허용) | 인가 코드가 평문으로 흐르면 탈취된다 |
fragment(#…) 불가 | 표준 위반 |
| 클라이언트당 호스트 하나 | 식별자(pairwise)는 첫 redirect_uri의 호스트를 섹터로 삼는다. 호스트가 갈리면 식별자가 의도와 다르게 나뉠 수 있어 등록을 거부한다. 호스트가 다르면 클라이언트를 따로 등록한다 — 같은 서비스면 sub는 같다 |
커스텀 스킴(myapp://) 불가 | 다른 앱이 가로챌 수 있다. 앱은 https 딥링크로 |
| 포트·끝 슬래시까지 일치 | https://a.example/cb와 https://a.example/cb/는 다른 값 |
예: https://www.remit.example/auth/membership/callback
로그아웃 리다이렉트 URI 예정
멤버십 로그아웃 후 돌아올 주소. 등록된 값만 post_logout_redirect_uri로 쓸 수 있다. 현재는 등록 경로가 없어 지정할 수 없으며, 반영 시 신청 항목에 추가된다.
동의항목 — scope
연동 서비스가 요청하는 정보의 범위다. 카카오의 동의항목에 해당하지만 멤버십은 항목이 셋뿐이고, 사용자에게 보이는 동의 화면은 제3자 제공 동의 한 장(첫 연결 때만)이다.
| scope | 제공 클레임 | 언제 요청하는가 |
|---|---|---|
openid | sub | 항상 |
email | email, email_verified | 사실상 항상. 단 email은 없을 수 있다(01 이해하기) |
offline_access | 리프레시 토큰 | 서버 간 백그라운드 호출이 필요할 때만. prompt=consent를 함께 보낸다 |
기본 조합은 openid email이다. 그 외 scope(profile, phone 등)는 오류 없이 무시된다 — 응답의 scope에 빠져 있으면 요청이 무시된 것이다.
개인정보 처리방침에 적을 것
연동 서비스는 머니박스(운영 법인)로부터 개인정보를 제공받는 자다. 연동 서비스의 개인정보 처리방침에 다음을 반영한다(문안은 각 사 법무 검토).
| 항목 | 내용 |
|---|---|
| 제공하는 자 | 주식회사 머니박스 |
| 제공받는 자 | 연동 서비스 운영 법인 |
| 제공 항목 | 이메일 주소, 통합 멤버십 회원 식별자(서비스 전용) |
| 제공 목적 | 통합 멤버십 계정으로 연동 서비스 로그인 및 회원 식별 |
| 보유·이용 기간 | 연동 서비스 회원 탈퇴 또는 통합 멤버십 연결 해제 시까지 |
사용자는 멤버십 화면에서 이 제공에 동의하고 로그인한다. 연동 서비스는 이 정보를 위 목적 외로 쓰거나 제3자에 재제공하지 않는다.