Skip to content

[Feat] Apple 로그인 출시 흐름 완성 - #104

Draft
MinHeokChoi wants to merge 2 commits into
feat/#101-social-login-foundationfrom
feat/#103-apple-login-readiness
Draft

[Feat] Apple 로그인 출시 흐름 완성#104
MinHeokChoi wants to merge 2 commits into
feat/#101-social-login-foundationfrom
feat/#103-apple-login-readiness

Conversation

@MinHeokChoi

Copy link
Copy Markdown
Contributor

DO NOT MERGE — 소셜 로그인 stack 일괄 검토 대기

✨ PR 유형

  • 새로운 기능 추가
  • 문서 수정
  • 테스트 추가, 테스트 리팩토링

🛠️ 작업내용

  • SecRandomCopyBytes로 32자 raw nonce를 만들고 SHA-256 challenge를 Apple 요청에 연결합니다. 이름·이메일 scope는 요청하지 않습니다.
  • callback의 identity token·authorization code·raw nonce·Apple user identifier를 한 요청에 바인딩하고 공통 coordinator로 전달합니다.
  • Apple user identifier를 Keychain/session에 저장하고 token rotation 뒤에도 보존합니다.
  • credential state와 credentialRevokedNotification의 revoked/notFound/transferred 상태에서 account session을 안전하게 무효화합니다. 로컬 루틴 접근은 유지합니다.
  • 현재 서버 OpenAPI가 지원하지 않는 raw nonce/user identifier는 추정 송신하지 않고 Moru/docs/AppleLoginReadiness.md에 release blocker로 기록합니다. withdrawal 응답에 Apple token revoke 완료 증거가 없는 점도 blocker로 남깁니다.

검증:

  • 관련 XCTest: 68 passed, 0 failed/skipped
  • 전체 XCTest: 363 passed, 0 failed/skipped
  • iPhone 16 Simulator Debug build: 성공
  • generic iPhone Debug/Release build: 성공
  • functional gate / SwiftData boundary gate: 통과
  • Info.plist / entitlements plutil, git diff check, secret scan: 통과
  • SwiftData schema/migration, Local Repository, Routine Domain 변경: 0건

📋 추후 진행 상황

  • 서버 OpenAPI에 raw nonce 검증 계약과 Apple revoke 완료 증거가 추가되면 staging·실기기 E2E를 수행합니다.
  • 다음 L2에서 Google 로그인을 구현합니다.
  • 실제 iPhone Apple 로그인·취소·revocation은 아직 미검증입니다.

📌 리뷰 포인트

  • nonce request/callback의 1회성 binding과 secret redaction을 확인해 주세요.
  • revoked notification과 session invalidation 사이 race가 안전한지 확인해 주세요.
  • OpenAPI 미지원 필드를 요청 body에 넣지 않은 boundary를 확인해 주세요.
  • account invalidation이 local-first 앱과 루틴 접근을 막지 않는지 확인해 주세요.

✅ Checklist

  • 커밋 메시지 컨벤션에 맞게 작성했습니다
  • 유지-보수를 위해 필요한 계약 주석을 작성했습니다

Closes #103

@coderabbitai

coderabbitai Bot commented Jul 27, 2026

Copy link
Copy Markdown

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 5bf70337-9337-44cb-b789-742b8d2ffb38

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/#103-apple-login-readiness

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant