[iOS] Apple 회원 탈퇴

Charlie·2023년 6월 1일
0

Apple Social Login

목록 보기
2/2

2022년 6월 30일부터 앱 내에서 사용자가 계정을 삭제할 수 있도록 허용해야 앱스토어 심사에 통과할 수 있게 심사 조건이 변경되었다.

애플 소셜 로그인은 다른 플랫폼만큼 간단하게 구현이 가능했는데, 회원 탈퇴 과정은 다른 플랫폼들과는 다르게 해야할 일들이 너무 많아서 따로 정리하게 됐다.



Revoke Token API

애플 회원탈퇴를 위해서는 Apple의 Revoke Token API를 호출해주어야 한다.
DOCS를 보면 API를 호출하기 위해 다음의 것들이 필요하다.

여기서 중요한 것은 Docs에는 분명 HTTP Body로 안내되어있지만 실제 API를 호출할 때에는 Body로 넘겨주면 안되고 Parameters로 넘겨주어 Path에 붙을 수 있도록 해야한다..! (이거 때문에 좀 고생..🥲)

💡 API 호출 시 Body말고 Params로 넘겨주기!



이제 어떤 것들이 필요한지 살펴보자

  • client_id : App Bundle ID
  • client_secret : 개발자 계정의 private key를 사용하는 JWT (JSON Web Token)
  • token : refresh token 또는 access token
  • token_type_hint : 토큰이 access token인지, refresh token인지 전달

client_id에는 앱 번들 id를 적어주면 된다.
client_secret과 token에 대해서는 잠시 뒤에 다시 살펴보기로 하고, token_type_hint는 params로 넘겨주는 token이 access인지, refresh인지에 따라 refresh_token 또는 access_token을 적어주면 된다.



요청에 대한 결과로는 200, 400을 받을 수 있는데, 400 에러 시 client_secret을 잘못 설정했을 때 등의 invalid_client 에러, token이 잘못되었을 경우의 invalid_grant 등의 에러를 만날 수 있다.

(client_secret을 생성할 때 시간을 GMT로 설정하지 않고 한국 시간으로 설정하면 invalid_client를 만날 수 있다😅)



Client Secret?

client_secret은 JWT이다. SwiftJWT라는 라이브러리를 사용해서 클라에서 토큰을 생성하는 방법이 있지만, 보안 등의 이슈로 서버에서 생성해주기로 했다.


Docs의 아래 부분을 살펴보면 client secret을 만드는 방법에 대해서 나와있다.

형태는 다음과 같고 하나하나 살펴보자면,

{
    "alg": "ES256",
    "kid": "ABC123DEFG"
}
{
    "iss": "DEF123GHIJ",
    "iat": 1437179036,
    "exp": 1493298100,
    "aud": "https://appleid.apple.com",
    "sub": "com.mytest.app"
}
  • alg : 알고리즘 (ES256 사용)
  • kid : 애플 개발자 사이트의 key 탭에서 앱에 등록한 Sign in with Apple의 Key ID
  • iss : 애플 개발자 Team ID
  • iat : 발급 시각 (issued at)
  • exp : 만료 시각 (발급으로부터 6개월 미만)
  • aud : "https://appleid.apple.com/"
  • sub : App bundle ID

주의할 점은 GMT를 기준으로 iss, exp를 설정해줘야 invalid_client를 피할 수 있다!


발급받은 JWT를 JWT.IO에서 valid한지 확인할 수도 있다. (사용법)

자! 이제 Client Secret을 생성해서 받아왔고, token을 구할 차례이다.



Token 받아오기

Token을 발급받기 위해서는 Apple의 token API를 호출해야한다.

(여기서도 마찬가지로 body로 넘겨주지말고 params로 넘겨주기!)

필요한 것들은 다음과 같다.

  • client_id : Apple bundle ID
  • client_secret
  • code : authorization code (애플 로그인 시 받아올 수 있음)
  • grant_type : authorization code, refresh token 중 어떤걸 사용할지
  • refresh_token : refresh token
  • redirect_uri

위 6가지 중에서 client_id, client_secret, code, grant_type을 사용하면 된다.

client_id는 앱 번들 id, client_secret은 방금 알아봤고, grant_type은 authorization_code를 적어주면 된다.

주의할 점은 code의 authorization code인데, 이는 애플 로그인 시 받아올 수 있으며
한번 발급된 authorization code는 1번만 사용될 수 있으며 5분간 유효하다.

💡 한번 발급된 authorization code는 1번만 사용될 수 있으며 5분간 유효하다.




Reference

profile
Hello

0개의 댓글