
DX SSO Bridge 사용 매뉴얼
버전 1.0.0 · DXCMS 9.8.0 이상 · PHP 5.6 이상
멀티 도메인(서브도메인 포함)에서 소셜 로그인을 본 사이트 한 곳에서 처리하고, 로그인이 끝나면 원래 사이트로 돌아가 로그인된 상태가 되게 하는 플러그인입니다. 코어 파일은 수정하지 않습니다.
예) dxstudio.designonex.com에서 카카오 로그인을 누름 → designonex.com에서 로그인 → 다시 dxstudio.designonex.com으로 복귀(로그인 완료)
1. 왜 필요한가
소셜 로그인(카카오, 네이버, 구글, 깃허브)은 로그인 후 돌아올 콜백 주소를 미리 등록한 도메인으로만 받습니다. 사이트가 여러 개면 도메인마다 등록해야 하고, 서브도메인이 많으면 사실상 관리할 수 없습니다. 또 로그인 정보(세션 쿠키)는 도메인마다 따로여서, 한 사이트에서 로그인해도 다른 도메인은 로그인되지 않습니다.
이 플러그인은 소셜 로그인을 본 사이트에서만 처리하고, 결과만 1회용 티켓으로 하위 사이트에 전달합니다.
2. 전제 조건
| 조건 | 설명 |
|---|---|
| 같은 설치, 같은 DB | 멀티사이트가 하나의 DXCMS 설치와 하나의 DB를 쓰는 구조여야 합니다. (회원이 공유됨) |
| 사이트 등록 | 하위 사이트 도메인이 관리자 → 사이트 관리에 등록된 활성 도메인이어야 합니다. |
| 본 사이트 소셜 설정 | 본 사이트에 소셜 로그인 키와 콜백 주소가 설정되어 있어야 합니다. |
| 쓰기 권한 | 최초 접속 때 플러그인 폴더에 install.done 파일을 만들 수 있어야 합니다. |
3. 설치
plugins/dx-sso-bridge/폴더를 사이트에 올립니다.- 관리자 화면에서 플러그인을 활성화합니다.
config.php를 열어hub_host를 본 사이트 도메인으로 맞춥니다.- 기본값은
designonex.com입니다. 스킴(https://)과www, 포트 없이 적습니다.
- 기본값은
- 사이트에 한 번 접속합니다. 티켓 테이블(
dx_sso_tickets)이 자동으로 만들어지고install.done파일이 생깁니다. - 본 사이트의 소셜 로그인 설정(키, 콜백 주소)은 평소 그대로 둡니다. 하위 사이트에는 콜백 주소를 따로 등록할 필요가 없습니다.
같은 플러그인을 모든 사이트에서 활성화하세요. 같은 설치를 공유하는 멀티사이트라면 한 번 활성화로 모든 도메인에 적용됩니다. 본 사이트에서는 아무것도 가로채지 않고 코어 동작 그대로입니다.
4. 동작 방식
[하위 사이트] [본 사이트]
사용자가 /auth/kakao 클릭
│
├─ ① 본 사이트로 이동 ───────▶ /sso-bridge/start
│ · 하위 사이트가 등록된 도메인인지 확인
│ · 이미 로그인이면 바로 ③으로
│ ▼
│ ② 카카오 로그인 (평소와 동일)
│ ▼
│ ③ /sso-bridge/issue
│ · 1회용 티켓 발급
◀─ ④ 티켓과 함께 복귀 ──────────┘
/sso-bridge/finish
· 티켓 확인 후 로그인
· 로그인 버튼을 눌렀던 페이지로 이동
- 하위 사이트에서 이미 로그인되어 있으면 가로채지 않습니다.
- 본 사이트에 이미 로그인되어 있으면 소셜 로그인 화면을 거치지 않고 바로 돌아옵니다.
- 일반 로그인(아이디/비밀번호)도 본 사이트를 거치게 하려면 하위 사이트의 로그인 링크를
/sso-bridge/go로 연결합니다.
주소 정리
| 주소 | 어디서 | 용도 |
|---|---|---|
/auth/kakao 등 |
하위 사이트 | 소셜 로그인 버튼. 자동으로 본 사이트로 중계됩니다. |
/sso-bridge/go |
하위 사이트 | 중계 시작. ?provider=kakao, ?redirect=/경로 지원 (provider 없으면 본 사이트 일반 로그인 화면) |
/sso-bridge/start |
본 사이트 | 하위 사이트의 요청을 받는 곳 (직접 쓰지 않음) |
/sso-bridge/issue |
본 사이트 | 티켓 발급 (직접 쓰지 않음) |
/sso-bridge/finish |
하위 사이트 | 티켓으로 로그인 (직접 쓰지 않음) |
5. 설정 (config.php)
| 키 | 기본값 | 설명 |
|---|---|---|
hub_host |
designonex.com |
본 사이트 도메인 |
providers |
kakao, naver, google, github | 중계할 소셜 목록. 코어의 /auth/{이름} 과 같은 이름 |
ticket_ttl |
120 | 티켓 유효 시간(초). 30~600 사이로 보정됨 |
disabled |
false | true면 중계를 끄고 코어 동작 그대로 (긴급 끄기) |
설정을 바꾼 뒤에는 저장만 하면 바로 적용됩니다.
6. 보안
- 티켓은 64자 무작위 값이며 1회용입니다. 사용되면 즉시 폐기되고, 기본 120초 뒤 만료됩니다.
- 티켓에는 요청한 하위 사이트의 세션 nonce가 묶여 있어서, 남이 만든 로그인 링크를 눌러 다른 사람 계정으로 로그인되는 공격을 막습니다.
- 돌아갈 도메인은 사이트 관리에 등록된 도메인만 허용합니다. 임의 주소로는 티켓이 나가지 않습니다.
- 로그인 후 이동하는 경로는 같은 사이트 안의 경로만 허용합니다. 외부 주소는
/로 바뀝니다. - 탈퇴·정지된 회원은 티켓이 있어도 로그인되지 않습니다.
- 오래된 티켓은 자동으로 정리됩니다.
7. 점검 방법
설치 후 아래 순서로 확인하세요.
- 하위 사이트 로그아웃 상태에서 로그인 화면의 카카오 버튼을 누릅니다.
- 본 사이트(
designonex.com) 주소로 이동하고 카카오 로그인 화면이 나와야 합니다.
- 본 사이트(
- 로그인을 마치면 하위 사이트의 원래 페이지로 돌아오고 로그인된 상태여야 합니다.
- 본 사이트에 로그인된 상태에서 하위 사이트 로그인 버튼을 누르면 로그인 화면 없이 바로 돌아와야 합니다.
- 여러 번 시험해도 이전 티켓이 재사용되지 않아야 합니다. (새로고침으로
finish주소를 다시 열면 로그인 화면으로 갑니다.)
8. 문제 해결
| 증상 | 확인할 것 |
|---|---|
| 로그인 후 다시 로그인 화면으로 돌아옴 | 하위 사이트가 사이트 관리에 등록되어 있는지, hub_host가 맞는지 확인하세요. 플러그인이 활성화되어 있는지도 확인하세요. |
| 하위 사이트에서 카카오 버튼이 그대로 하위 사이트에서 처리됨 | 플러그인이 해당 사이트에서 로드되는지, config.php의 providers에 그 소셜이 있는지, disabled가 false인지 확인하세요. |
| 본 사이트에서 소셜 로그인이 안 됨 | 이 플러그인과 무관하게 본 사이트의 소셜 설정(키, 콜백 주소) 문제입니다. 본 사이트에서 직접 로그인해 보세요. |
| 티켓 테이블 오류 | 플러그인 폴더 쓰기 권한과 install.done 파일을 확인하세요. 테이블이 이미 있다면 파일만 만들어 두면 됩니다. |
www로 접속하는 사이트가 있음 |
hub_host는 실제 접속 주소와 정확히 같아야 합니다. www가 붙은 주소를 본 사이트로 쓴다면 그대로 적어 주세요. |
오류는 data/error.log에서 [SsoBridge]로 시작하는 줄로 확인할 수 있습니다.
9. 알아둘 점
- 하위 사이트마다 세션은 따로 만들어집니다. 본 사이트에서 로그아웃해도 하위 사이트 로그인은 유지되고, 반대도 마찬가지입니다. 하위 사이트 세션은 코어의 기본 로그인 유지 시간을 따릅니다.
- 로그인 후 돌아가는 곳은 로그인 버튼을 누르기 직전의 페이지입니다. 주소를 지정하려면
?redirect=/경로를 붙이세요. - 이 플러그인은 로그인만 중계합니다. 회원가입 화면, 이메일 인증 등 코어의 다른 절차는 본 사이트에서 평소처럼 진행됩니다.
10. 데이터베이스
| 테이블 | 용도 |
|---|---|
sso_tickets |
로그인 티켓 (token, member_id, ret_host, nonce, ip, used, created_at, expires_at). 사용 후 또는 만료 후 자동 정리 |