현재 운영 중인 서비스가 어른들의 사정(?)으로 기존에 앱스토어에 올라와있던 어플의 팀을 이전해야 하는 경우가 생겼는데 이 때 팀 변경 후(정확히는 변경 후, Service Ids를 새로 생성한 후) 기존 애플 유저들의 계정이 로그인 되지 않고 가입 프로세스를 타게 되었는데, 이를 해결 하기 위해 이전 된 팀으로 기존 유저 정보를 마이그레이션 하는 방법을 정리 해둔다.
# ruby 스크립트와 키파일이 존재하는 디렉토리로 이동 cd /Users/user/Documents/apple_client
# ruby 스크립트 실행 ruby client_secret.rb
스크립트가 정상적으로 실행됐으면 client_secret이 생성됨
1 2 3
Ignoring ffi-1.15.0 because its extensions are not built. Try: gem pristine ffi --version 1.15.0 # 아래 eyJraWQiOiJHMzg2UlM3MlY3IiwiYWxnIjoiRVMyNTYifQ.eyJpc3MiXXXXXXXXXxxxTJSOVM1IiwiaWF0IjoxNjM1MzAwOTY0LCJleHAiOjE2NTA4NTI5NjQsImxxxxxxXXXBzOi8vYXBwbGVpZC5hcHBsZS5jb20iLCJzdWIiOiJjb20uampsZWUuV2VkUXVlZW4ifQ.Zw18dKVQxxxxxXXXXXXeSVMT8B_aTkVHULNPOal7W_n_KTba3WtYwE-fQh8Ru6GhmNdVbx2VD1TnPBjTZmKB6PaZ58w
2. access_token 생성
기존 provider_id를 transfer 하기 위해선 apple api로 통신해야하는데 이 때 필요한 access_token을 생성한다.
URL : https://appleid.apple.com/auth/token HTTP Method : POST Content-Type : x-www-form-urlencoded Body : { grant_type : client_credentials scope : user.migration client_id : 클라이언트 아이디 client_secret : 위에서 생성한 client_secret }
요청 후 결과 확인
정상적으로 응답이 온다면 아래처럼 1시간 짜리 access_token이 발급된다.
1 시간이 경과하면 재발급을 받아야 한다.
3. 기존 유저 provider Id transfer
변경된 팀의 provider Id로 변경하기 전 단계
여기서 응답받은 transfer_sub 으로 다시 변경 요청을 보내야 변경된 팀 provider id를 받을 수 있음
request 작성
1 2 3 4 5 6 7 8 9 10 11
URL : https://appleid.apple.com/auth/usermigrationinfo HTTP Method : POST Content-Type : x-www-form-urlencoded Authorization: Bearer {access_token} Body : { sub : 기존 유저 Provider Id target : 새로 만든 팀 ID client_id : 클라이언트 아이디 client_secret : 위에서 생성한 client_secret }
이 때 전송되는 client_secret은 새로 만든 팀의 키 파일로 생성된 client_secret이다.
이 때 전송되는 client_secret은 새로 만든 팀의 키 파일로 생성된 client_secret이다.
이 때 전송되는 client_secret은 새로 만든 팀의 키 파일로 생성된 client_secret이다.
client_secret을 만드는 방법은 1번과 같다.
bearer token은 기존에 만든 것을 사용하면 된다.
1 2 3 4 5 6 7 8 9 10
URL : https://appleid.apple.com/auth/usermigrationinfo HTTP Method : POST Content-Type : x-www-form-urlencoded Authorization: Bearer {access_token} Body : { transfer_sub : 이전 단계에서 transfer된 sub client_id : 클라이언트 아이디 client_secret : 새로 만든 팀의 client_secret }
요청 후 결과 확인
000000.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.0000
형식으로 생성되는데 이 때 맨 앞에 00000. 부분은 변경되지 않으므로
이 부분을 확인
5. DB에 저장된 유저 provider Id 변경
필자의 서비스는 provider ID로 유니크한 KEY를 만들어 사용하고 있었으므로 이 부분을 업데이트 해주었다.