> 이 문서는 Simple Easy Social Login (SESLP) 플러그인에서 각 소셜 로그인 공급자(Google, Facebook, LinkedIn, Naver, Kakao, Line)를 설정하는 방법을 안내합니다.

> 모든 로그인은 OAuth 2.0 또는 OpenID Connect(OIDC) 표준에 기반하며,
> 각 플랫폼의 콘솔에서 발급받은 Client ID / Secret을 입력해야 합니다.

## 🔧 공통 설정 가이드

#### 1) Redirect URI 규칙:

`https://{도메인}/?social_login={provider}`

예:

- Google → `https://example.com/?social_login=google`
- Facebook → `https://example.com/?social_login=facebook`
- LinkedIn → `https://example.com/?social_login=linkedin`
- Naver → `https://example.com/?social_login=naver`
- Kakao → `https://example.com/?social_login=kakao`
- LINE → `https://example.com/?social_login=line`

#### 2) HTTPS 필수

대부분의 공급자는 HTTPS가 필요하며, `http://` 리디렉트는 거부됩니다.

#### 3) 정확한 일치

Redirect URI는 콘솔에 등록된 값과 100% 일치해야 합니다
(프로토콜, 서브도메인, 경로, 쿼리 문자열까지 포함).

#### 4) 이메일 비공개 사용자 처리

일부 공급자는 사용자가 이메일 제공을 거부할 수 있습니다. 이 경우 플러그인은 내부적으로 고유 ID 기반 사용자 연결을 지원합니다.

#### 5) 로그 확인 경로

- `/wp-content/SESLP-debug.log`
- `/wp-content/debug.log` (`WP_DEBUG_LOG = true`)

## 🐞 디버그 로그 및 문제 해결

SESLP는 OAuth 및 소셜 로그인 문제를 진단하는 데 도움이 되는 전용 디버그 로그 파일을 제공합니다.

SESLP 디버그 로그 읽는 방법

#### 로그 파일 위치

- `/wp-content/SESLP-debug.log` (SESLP 디버그 로그)
- `/wp-content/debug.log` (`WP_DEBUG_LOG = true`)

#### 로그 형식

    [YYYY-MM-DD HH:MM:SS Z] [LEVEL] Message {"key":"value",...}

- `Z`: UTC 또는 워드프레스 로컬 시간대 (예: KST) — SESLP 설정에서 선택 가능
- 개인정보 보호: 이메일 / 토큰 / 시크릿 값은 자동으로 마스킹 처리됨 (예: `r********@g****.com`)

#### OAuth 흐름 로그 (일반적)

1) OAuth 시작

    [DEBUG] State created {"provider":"google","state":"906****23","ttl":"10min"}

의미: CSRF 보호를 위한 state 토큰이 생성되었습니다. `ttl`은 10분간 유효합니다.

2) 콜백 진입

    [DEBUG] Auth route triggered {"provider":"google","has_code":1}

의미: 콜백 라우트에 진입했습니다. `has_code:1` → OAuth `code` 값을 수신했습니다.

3) State 검증

성공:

    [DEBUG] State validated {"provider":"google","state":"906****23"}

실패:

    [WARNING] State validation failed: not found/expired {"provider":"google","state":"906****23"}

4) 토큰 교환

    [DEBUG] Token response (google) {"has_access_token":1}

의미: 액세스 토큰을 정상적으로 획득했습니다.

실패:

    [ERROR] Token request failed (google) {"error":"..."}

5) 사용자 정보 요청

    [ERROR] Userinfo request failed (google)
    [WARNING] Invalid userinfo (google)

6) 사용자 연결 (Linker)

    [DEBUG] Linker: signing in user {"user_id":45,"provider":"google","created":0}
    [INFO]  Login success (google) {"user_id":45,"email":"r********@g****.com"}

7) 리디렉션

    [DEBUG] Redirect decision {"mode":"profile","user_id":45,"url":"https://example.com/wp-admin/profile.php"}

#### 빠른 참조 테이블

로그 메시지 (요약) | 원인 추정 | 조치 방법
--- | --- | ---
State validation failed | 타임아웃, 탭 전환, 중복 요청 | 빠르게 재시도, 시크릿/프라이빗 모드 사용
Token request failed | Client ID/Secret/Redirect 오류, 요청 차단 | 개발자 콘솔, 방화벽, 서버 시간 확인
Userinfo invalid | 스코프 누락 또는 이메일 비공개 | `email, profile` 스코프 추가, 사용자 동의
User create failed | 계정 충돌 또는 워드프레스 제한 | 기존 사용자, 멀티사이트 규칙 확인
Redirect missing | 코드 내 조기 return | 콜백 이후 Redirect 클래스 실행 여부 확인

#### 버그 리포트에 포함하면 좋은 정보

- 관련 로그 라인 (마스킹된 상태)
- 사용한 Provider (Google / Naver 등)
- 리디렉션 모드 / 커스텀 URL
- 디버그 로그 활성화 상태
- 워드프레스 환경 (단일 사이트, 멀티사이트, 캐시 플러그인)

## 🌍 Provider별 설정 가이드

> 아래의 각 공급자를 확장하고 해당 공급자를 위해 준비한 한국어 가이드 콘텐츠를 확인하세요.

Google (구글)

- 권장 스코프: `openid email profile`
- Redirect URI 규칙: `https://{도메인}/?social_login=google`

#### 1) 준비 사항 (필수 체크리스트)

- HTTPS 권장/사실상 필수 (로컬은 신뢰된 개발용 인증서 사용)
- Redirect URI는 콘솔에 등록한 값과 100% 일치해야 합니다
  예) `https://example.com/?social_login=google`
- 테스트 모드에서는 테스트 사용자만 로그인 가능 (최대 100명)
- 앱 도메인(Authorized domains) 등록 및 소유권 검증이 필요할 수 있음

#### 2) 프로젝트 / 동의 화면 설정

(1) Google Cloud Console 접속

→ https://console.cloud.google.com/apis/credentials

(2) 프로젝트 선택 → 새 프로젝트 생성

(3) API 및 서비스 → OAuth 동의 화면

(4) 사용자 유형: 외부(External)

(5) 앱 정보 입력

- 앱 이름
- 사용자 지원 이메일
- (선택) 로고

(6) 앱 도메인 설정

- 홈페이지 / 개인정보처리방침 / 약관 URL 입력
- Authorized domains에 루트 도메인 추가
- 필요 시 Search Console로 도메인 검증

(7) 스코프 설정

- 권장: `openid`, `email`, `profile`
- 민감 스코프는 운영 전 검토 필요

(8) 테스트 사용자 추가

(9) 저장

> 기본 스코프만 사용하면 검토 없이 운영 가능한 경우가 많습니다.

#### 3) OAuth 클라이언트 생성 (웹 애플리케이션)

(1) API 및 서비스 → 사용자 인증 정보

(2) OAuth 클라이언트 ID 생성

(3) 애플리케이션 유형: 웹 애플리케이션

(4) 이름 설정 (예: SESLP – Front)

(5) Redirect URI 추가

- `https://{도메인}/?social_login=google`

(6) 생성 → Client ID / Secret 복사

> JavaScript origin 설정은 일반적으로 필요 없습니다.

#### 4) 워드프레스 설정

(1) WP 관리자 → SESLP 설정 → Google

(2) Client ID / Secret 입력 → 저장

(3) 프론트에서 로그인 테스트

#### 5) 테스트 → 운영 전환

(1) OAuth 동의 화면 게시 상태 확인

(2) 운영 전환 시 체크

- 앱 정보 / 도메인 / 정책 정확성
- 불필요 스코프 제거
- 필요 시 검토 요청

(3) 운영 전환 후 전체 사용자 로그인 가능

#### 6) 자주 발생하는 오류

redirect_uri_mismatch

→ URI 불일치 (프로토콜/서브도메인/쿼리 포함)

access_denied / disallowed_useragent

→ 브라우저 환경 문제 → 일반 브라우저 사용

invalid_client

→ Client ID/Secret 오류

email 없음

→ email 스코프 또는 사용자 설정 문제

로그 확인:

- `wp-content/SESLP-debug.log`
- `wp-content/debug.log`

#### 7) 요약 체크리스트

- OAuth 동의 화면 설정 완료
- 웹 애플리케이션 클라이언트 생성
- Redirect URI 등록
- SESLP 설정 입력 및 테스트
- 운영 전환 준비 완료

Facebook (페이스북)

- Redirect URI: `https://{도메인}/?social_login=facebook`
- 요청 권한(권장): `public_profile`, `email`
- Facebook은 `openid`를 사용하지 않습니다.

#### 1) 앱 생성 및 제품 추가

(1) Meta for Developers 접속 → 로그인

→ https://developers.facebook.com/

(2) Create App → 일반(Consumer 등) 유형 선택 → 앱 생성

(3) 왼쪽 Products에서 Facebook Login 추가

(4) Settings(설정) 진입 → 아래 항목 점검

- Client OAuth Login: ON
- Web OAuth Login: ON
- Valid OAuth Redirect URIs:
  - `https://{도메인}/?social_login=facebook`
- (선택) Enforce HTTPS: 기본 권장

#### 2) 앱 기본 설정 (App Settings → Basic)

- App Domains: `example.com`
- Privacy Policy URL: 공개 접근 가능한 정책 페이지
- Terms of Service URL: 공개 접근 가능한 약관 페이지
- User Data Deletion: 삭제 지침 URL 또는 엔드포인트 제공
- Category / App Icon: 설정 후 Save

#### 3) 스코프(권한) 및 App Review

- 기본 권한: `public_profile`
- 선택 권한: `email`
- `email`은 대부분 검수 없이 사용 가능 (예외 존재)
- 고급 권한은 App Review / Business Verification 필요

#### 4) 모드 전환 (개발 → 운영)

앱 설정에서 Development → Live로 전환

#### 5) Live 전환 전 체크리스트

- Privacy Policy / Terms / Data Deletion URL 준비
- Redirect URI 정확 입력
- 불필요 권한 제거
- 필요 시 App Review 완료

#### 6) 워드프레스 설정 (SESLP)

(1) WP 관리자 → SESLP 설정 → Facebook

(2) App ID / App Secret 입력 → 저장

(3) 프론트에서 로그인 테스트

#### 7) 트러블슈팅

Can't Load URL / redirect_uri 에러

→ Redirect URI가 콘솔 값과 정확히 일치하는지 확인

email null

→ 이메일 비공개 또는 미등록 → ID 기반 연결 필요

권한 오류

→ 고급 권한 사용 시 App Review 필요

Live 전환 불가

→ 정책/약관/데이터 삭제 URL 누락 또는 비공개

LinkedIn (링크드인)

- Redirect URI: `https://{도메인}/?social_login=linkedin`
- 필수 설정: OpenID Connect(OIDC) 활성화
- 권장 스코프: `openid`, `profile`, `email`
- LinkedIn은 기존 `r_liteprofile`, `r_emailaddress` 스코프를 점진적으로 폐기하고 있으며, 신규 앱은 반드시 OIDC 표준 스코프를 사용해야 합니다.

#### 1) 애플리케이션 생성

(1) LinkedIn Developers 콘솔 접속

→ https://www.linkedin.com/developers/apps

(2) LinkedIn 계정으로 로그인

(3) Create app 클릭

(4) 필수 항목 입력

- App name: 서비스명 (예: `MySite LinkedIn Login`)
- LinkedIn Page: 회사 페이지 (없으면 “None” 선택)
- App logo: 100×100 이상 PNG/JPG
- Privacy Policy URL: 공개 접근 가능한 개인정보처리방침
- Business Email: 검증 가능한 이메일

(5) Create app 클릭 → 앱 생성 완료

> Development Mode가 기본 적용되어 `openid`, `profile`, `email` 기반 로그인 테스트를 즉시 진행할 수 있습니다.

#### 2) OpenID Connect(OIDC) 활성화

(1) 생성된 앱 페이지에서 Products 탭으로 이동

(2) Sign In with LinkedIn using OpenID Connect 항목 찾기

(3) Add product 클릭 → 승인 후 OIDC 사용 가능

(4) Auth 탭에서 OIDC 관련 설정 확인 가능

> OIDC 스코프 사용 필수

> - `openid` → ID 토큰 발급
> - `profile` → 이름, 사진, 헤드라인 등
> - `email` → 이메일 주소

#### 3) OAuth 2.0 설정 (Auth 탭)

(1) Auth → OAuth 2.0 settings 이동

(2) Redirect URLs 섹션에 아래 URI 추가

→ `https://{도메인}/?social_login=linkedin`

(3) 정확한 일치 확인 (프로토콜, 서브도메인, 슬래시, 쿼리 포함)

(4) 여러 환경 사용 시 각각 등록

- 로컬(Local): `https://localhost:3000/?social_login=linkedin`
- 스테이징(Staging): `https://staging.example.com/?social_login=linkedin`
- 운영(Production): `https://example.com/?social_login=linkedin`

(5) Save 클릭

#### 4) Client ID / Client Secret 확인 및 입력

(1) Auth 탭 상단에서 확인

- Client ID
- Client Secret

(2) 워드프레스 관리자 → SESLP 설정 → LinkedIn 탭

(3) 두 값 붙여넣기 → 저장

(4) 프론트엔드에서 LinkedIn 로그인 버튼으로 실제 테스트

> 보안 주의

> - Client Secret은 절대 노출하지 마세요.
> - 필요 시 Regenerate secret으로 재발급하세요.

#### 5) 스코프(Scopes) 및 권한 설명

스코프 | 설명 | 비고
--- | --- | ---
`openid` | OpenID Connect 표준 ID 토큰 반환 | 필수
`profile` | 이름, 사진, 헤드라인 등 프로필 정보 | 필수
`email` | 이메일 주소 반환 | 필수

> 구형 스코프 (`r_liteprofile`, `r_emailaddress`)

> → 2024년 이후 점진적 폐기 예정
> → 신규 앱은 사용 불가, 기존 앱도 OIDC 전환 권장

#### 6) 트러블슈팅 및 유의사항

(1) redirect_uri_mismatch

→ 등록된 URI와 요청 URI가 조금이라도 다를 경우 발생
→ 프로토콜, 서브도메인, 슬래시, 쿼리까지 100% 일치 확인

(2) invalid_client

→ Client ID/Secret 오타 또는 앱 비활성 상태
→ 재확인 또는 Regenerate secret

(3) email NULL

→ 사용자 동의 거부 또는 `email` 스코프 누락
→ 동의 화면에서 이메일 사용 목적을 명확히 설명

(4) insufficient_scope

→ 요청 스코프가 앱에 승인되지 않음
→ OIDC 활성화 및 스코프 재확인

(5) OIDC not enabled

→ Products 탭에서 OpenID Connect를 추가하지 않음

로그 확인 경로:

- `/wp-content/SESLP-debug.log` (SESLP 디버그 ON 시)
- `/wp-content/debug.log` (WP_DEBUG = true)

#### 7) 요약 체크리스트

- 앱 생성 완료 (`https://www.linkedin.com/developers/apps`)
- Sign In with LinkedIn using OpenID Connect 제품 추가
- Redirect URI 정확히 등록 (`https://{도메인}/?social_login=linkedin`)
- Client ID / Secret → SESLP 입력 및 저장
- 스코프: `openid profile email` (구형 스코프 사용 금지)
- HTTPS 환경에서 프론트엔드 로그인 테스트 완료

> 참고

> - SESLP는 OIDC 인증 흐름에 완벽 대응합니다.
> - 기존 OAuth 2.0 방식은 더 이상 지원되지 않습니다.
> - 신규 개발 시 반드시 OpenID Connect를 사용하세요.

Naver (네이버)

- Redirect URI: `https://{도메인}/?social_login=naver`
- 권장 스코프: 기본 프로필(`name`), 이메일(`email`)
- 네이버는 네아로(Naver Login) API를 사용하며, HTTPS 필수

#### 1) 애플리케이션 등록

(1) 네이버 개발자 센터 접속

→ https://developers.naver.com/apps/

(2) 네이버 계정으로 로그인

(3) Application → 애플리케이션 등록 클릭

(4) 필수 항목 입력

- 애플리케이션 이름: 서비스명 (예: `MySite Naver Login`)
- 사용 API: 네아로 (Naver Login)
- 환경 추가 → 웹(Web)

- 서비스 URL: `https://example.com`
- Callback URL: `https://example.com/?social_login=naver`

(5) 약관 동의 후 등록 → 앱 생성 완료

> 주의

> - HTTPS 필수 → HTTP 등록 시 오류 발생
> - 서브도메인별 별도 등록 필요
>   예: `blog.example.com` ≠ `example.com`

#### 2) Client ID / Client Secret 확인

(1) 내 애플리케이션 목록 이동

(2) 앱 선택 → Client ID / Client Secret 확인

(3) 두 값 복사

#### 3) 워드프레스 설정 (SESLP)

(1) WP 관리자 → SESLP 설정 → Naver

(2) Client ID / Secret 입력

(3) Redirect URI 일치 확인

→ `https://{도메인}/?social_login=naver`

(4) 저장 후 로그인 테스트

#### 4) 권한 및 정보 제공 설정

정보 | 스코프 | 비고
--- | --- | ---
이름 | `name` | 기본 제공
이메일 | `email` | 기본 제공
성별, 생일 | 별도 요청 | 검수 필요

> - 사용자는 동의 화면에서 정보 제공을 선택할 수 있습니다.
> - 이메일 거부 시 `email = null` → ID 기반 계정 연결 필요
> - 민감 정보는 앱 검수 후 사용 가능

#### 5) 트러블슈팅 및 유의사항

Redirect URI mismatch

→ 등록값과 요청값 불일치

HTTPS 오류

→ HTTP 사용 불가

서브도메인 문제

→ 각각 별도 등록 필요

email NULL

→ 사용자 거부 → ID 기반 처리

앱 검수 필요

→ 추가 정보 요청 시 필요

로그 확인:

- `/wp-content/SESLP-debug.log`
- `/wp-content/debug.log`

#### 6) 요약 체크리스트

- 네이버 앱 등록 완료
- Callback URL 등록
- HTTPS 사용
- 서브도메인 등록 (필요 시)
- Client ID / Secret 입력
- 이메일 동작 테스트
- 프론트 로그인 테스트 완료

> 참고

> - SESLP는 네아로(Naver Login) 인증 흐름을 완벽 지원합니다.
> - 기본 로그인은 검수 없이 즉시 사용 가능합니다.

Kakao (카카오)

- Redirect URI: `https://{도메인}/?social_login=kakao`
- 권장 스코프: `profile_nickname`, `profile_image`, `account_email`
- `account_email`은 실명/사업자 인증 후 사용 가능
- HTTPS 필수, Client Secret 활성화 필수

#### 1) 애플리케이션 생성

(1) Kakao Developers

→ https://developers.kakao.com/

(2) 로그인 → 내 애플리케이션 → 추가

- 앱 이름
- 회사명
- 카테고리
- 약관 동의

(4) 저장

#### 2) 카카오 로그인 활성화

- 제품 설정 → 카카오 로그인
- 활성화 ON
- Redirect URI 등록

`https://{도메인}/?social_login=kakao`

#### 3) 동의 항목 설정

스코프 | 설명 | 비고
--- | --- | ---
`profile_nickname` | 닉네임 | 기본
`profile_image` | 프로필 이미지 | 기본
`account_email` | 이메일 | 인증 필요

> - 민감 정보는 인증 후 사용 가능
> - 동의 목적 명확히 작성

#### 4) 플랫폼 도메인 등록

앱 설정 → 플랫폼

`https://{도메인}`

#### 5) Client Secret 생성

- 보안 → Client Secret ON
- Secret 생성
- 활성화

> 활성화 안 하면 invalid_client 오류 발생

#### 6) REST API 키

REST API Key → Client ID

#### 7) 워드프레스 설정

SESLP → Kakao

Client ID / Secret 입력 → 저장

#### 8) 트러블슈팅

redirect_uri_mismatch

→ URI 불일치

invalid_client

→ Secret 미활성화

email NULL

→ 사용자 거부

HTTPS 필요

#### 9) 체크리스트

- 로그인 활성화
- Redirect URI 등록
- 도메인 등록
- Secret 활성화
- 테스트 완료

> SESLP는 Kakao OAuth + Client Secret 흐름 완벽 지원

LINE (라인)

- Redirect URI: `https://{도메인}/?social_login=line`
- 필수: OpenID Connect + 이메일 승인
- 스코프: `openid`, `profile`, `email`
- HTTPS 필수

#### 1) 채널 생성

LINE Developers

- 비즈니스 계정 로그인
- Provider 생성
- LINE Login 채널 생성

#### 2) 이메일 권한 신청

- OpenID Connect 메뉴
- Email permission Apply
- 정책 URL 제출

→ 승인 후 사용 가능

#### 3) Callback URL

`https://{도메인}/?social_login=line`

- 정확히 일치 필요
- HTTPS 필수

#### 4) Publish

- Development → 테스트용
- Published → 실제 서비스

#### 5) Channel ID / Secret

→ SESLP에 입력

#### 6) 트러블슈팅

redirect_uri_mismatch

→ URI 불일치

invalid_client

→ Secret 오류

email NULL

→ 승인 안 됨

#### 7) 체크리스트

- 채널 생성
- 이메일 승인
- Callback 등록
- Published 상태
- 테스트 완료

> SESLP는 LINE OpenID Connect 완벽 지원