Skip to content

[Feat]: Apple 소셜 로그인 API 구현 #110

Description

@juwoojae

Issue 요약

Apple OAuth 2.0 / OpenID Connect를 연동하여 사용자가 Apple 계정으로 로그인할 수 있도록 구현합니다.

기존 Google / Kakao / Naver OAuth에서 적용한 백엔드 중심 handoff token 방식을 참고하여, Apple 로그인 요청 / callback 수신 / authorization code 검증 / Apple ID Token 검증 / 사용자 정보 조회 및 매핑 / 서비스 토큰 발급 흐름을 구현합니다.

Issue 상세

기존 소셜 로그인 API에서는 Google, Kakao, Naver OAuth 2.0을 연동하여 사용자가 소셜 계정으로 로그인할 수 있도록 구현했습니다.

이번 이슈에서는 Apple 로그인을 추가하여 사용자가 Apple 계정으로도 서비스에 로그인할 수 있도록 확장합니다.

로그인 흐름은 기존 Google OAuth 리팩토링 구조 및 Naver 소셜 로그인 API 구현 방식과 동일하게 백엔드 중심으로 처리합니다.

참고 ISSUE

AS-IS

  • Google / Kakao / Naver 소셜 로그인만 지원
  • Apple 계정 기반 로그인 미지원
  • iOS 환경에서 Apple 로그인 지원 필요
  • 소셜 제공자별 로그인 확장 구조 필요

TO-BE

  • 앱이 백엔드의 Apple 로그인 시작 endpoint 호출
  • 백엔드가 Apple OAuth Authorization URL 생성 및 redirect 수행
  • Apple 로그인 완료 후 Apple이 백엔드 callback URL로 redirect
  • 백엔드가 authorization code를 수신
  • 백엔드가 Apple token endpoint에 code를 전달하여 token 응답 수신
  • 백엔드가 Apple ID Token을 검증
  • Apple ID Token의 subject 값을 provider id로 사용
  • Apple에서 제공하는 email, name 등 사용자 정보를 매핑
  • email이 null이거나 비공개 릴레이 이메일일 수 있으므로 방어적 코드 작성
  • 조회한 사용자 정보를 기반으로 기존 회원 여부 확인
  • 기존 회원은 로그인 처리
  • 신규 회원은 회원가입 처리 후 로그인 처리
  • 백엔드가 짧은 수명의 1회용 handoff token 생성
  • 백엔드가 앱 deep link로 handoff token 전달
  • 앱이 handoff token을 백엔드에 전달
  • 백엔드가 handoff token 검증 후 서비스 access token / refresh token 발급

이번 구현을 통해 소셜 로그인 제공자를 Apple까지 확장하고, OAuth 핵심 흐름을 백엔드에서 일관되게 관리할 수 있도록 합니다.

또한 앱 딥링크에는 서비스 JWT 또는 Apple access token / id token을 직접 노출하지 않고, 짧은 수명의 handoff token만 전달하여 보안성을 유지합니다.

To do

  • Apple Developer 설정 확인
  • Apple Services ID / Team ID / Key ID / Private Key 설정 확인
  • Apple client id / team id / key id / private key / redirect URI 환경변수 추가
  • Apple 로그인 시작 endpoint 설계 및 구현
  • Apple OAuth Authorization URL 생성 로직 구현
  • Apple OAuth redirect URI를 백엔드 callback URL 기준으로 설정
  • Apple callback endpoint 구현
  • callback에서 authorization code 수신 로직 구현
  • Apple client secret JWT 생성 로직 구현
  • Apple token endpoint 연동 및 token 응답 수신 구현
  • Apple ID Token 서명 검증 로직 구현
  • Apple 공개키 JWKS 조회 및 검증 로직 구현
  • Apple ID Token의 issuer / audience / expiration 검증
  • Apple subject 값을 provider id로 매핑
  • Apple email / name 등 사용자 정보 응답 DTO 작성
  • email이 null일 수 있는 케이스 방어적 코드 작성
  • Apple 비공개 릴레이 이메일 처리 방식 확인
  • 기존 회원 조회 및 신규 회원 가입 처리 로직 연결
  • 서비스 가입 가능 조건 검증 로직 반영
  • handoff token 생성 로직 연결
  • handoff token 저장소 및 TTL 정책 기존 구조 재사용
  • callback 성공 시 앱 deep link로 handoff token 전달
  • handoff token 교환 후 서비스 access token / refresh token 발급
  • 로그인 후 온보딩 필요 여부 반환 스펙 반영
  • Apple 로그인 실패 / 취소 / callback 실패 예외 처리
  • Swagger 문서 작성
  • Apple 소셜 로그인 정상 동작 테스트

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Feat새로운 기능을 추가할 때 사용합니다.

Type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions