개요Apple DeveloperApp IDServices IDRedirect URL 등록Key 생성서버 구현Server to Server Notification Endpoint애플 로그인Reference
이 포스트는 현재 작성중입니다
개요
Ios 앱을 개발할 때 소셜 로그인 기능을 포함한다면 애플 내부의 지침으로 Apple ID 로그인을 포함해야 합니다.
Apple Developer
애플 로그인을 위해서는 애플 개발자 사이트에서 App ID, Key, Service ID를 생성해줘야 한다.
App ID
- <인증서, 식별자 및 프로파일(Certificates, Identifiers & Profiles)> → 식별자(Identifiers)로 이동
- + 버튼으로 Identifier 추가
- App IDs, Services IDs, Pass Type IDs 중 App IDs 선택
- App, App Clip중 App 선택
- Description에 앱 설명 작성, Bundle ID 작성(애플 로그인을 추가할 앱의 Bundle identifier 권장)아래로
- Capabilities에서 Sign In with Apple을 선택
- Configure을 눌러 들어갑니다
- Sign In with Apple: App ID Configuration에서 Enable as a primary App ID
- Server to Server Notification Endpoint에서
- 등록하면 App ID가 생성된다. App ID Prefix(Team ID)를 기록해두자
그러나 앱을 배포할 때 App ID를 생성해야 하기에 앱이 배포되거나 배포 준비중이면 App ID는 이미 생성되어 있을 가능성이 높다.
Services ID
- <인증서, 식별자 및 프로파일(Certificates, Identifiers & Profiles)> → 식별자(Identifiers)로 이동
- + 버튼으로 Identifier 추가
- App IDs, Services IDs, Pass Type IDs 중 Services IDs 선택
- Description, Identifier 작성
- Identifier 값은 App ID생성 할때 사용한 Bundle ID를 역순으로 넣어주는 것을 권장
- 예시) com.cat.food → food.cat.com
- Services ID Identifier 값은 이후 client_id, aud의 값으로 사용된다
- 등록하면 Services ID가 생성된다
Redirect URL 등록
- 생성했던 Services ID로 이동
- Sign in with Apple 옆의 Configure 누르기
- Web Authentication Configuration 진입
- Primary App ID에서 생성했던 App ID 선택
- Domains and Subdomains에는 애플 로그인을 사용할 웹사이트의 주소 입력
- Return URLs에는 Return URLs는 애플 로그인을 한 유저의 정보가 돌아오는 callback 주소
Key 생성
client_secret 생성 시 필요한 private key를 생성한다.
- <인증서, 식별자 및 프로파일(Certificates, Identifiers & Profiles)> → Keys로 이동
- Key Name 입력, Sign in with Apple 선택, Configure 클릭
- 생성했던 App ID 선택
- 저장 후 등록하면 키가 생성되고 다운로드가 가능하다. Key ID도 잘 기억해 두자
이때 생성한 키는 다시 다운로드가 불가능 하니 잘 보관해야 한다
서버 구현
Server to Server Notification Endpoint
다음과 같은 상황에서 애플에서 알림을 보내준다.
- email-disabled : 유저가 이메일 수신을 중단했을 때
- email-enabled : 유저가 이메일 수신을 활성화했을 때
- consent-revoked : 유저가 Apple ID 연동 해제했을 때
- account-delete : 유저가 Apple ID 를 삭제했을 때
이때 해당 알림은 바로오지 않고, 어느정도 딜레이가 있거나 한번에 올 수 있다고 한다.
Request는 POST method로 오며, 다음과 같은 구조를 가진다.
{'payload': 'eyJradjacjdskrpzdigksmsep'}
이를 디코딩 하면
{ "iss": "https://appleid.apple.com/", "aud": "<Bundle Identifier>", "iat": 1508184845, "jti": "<unique events stream id>", "events": { "type": "consent-revoked", "sub": "<user_id>", "event_time": 1508184845 } }
이런식의 값을 받아, 서버에서 처리해주면 된다.