App Store Server API 연동 과정에서 사용된 보안기술 정리
https://developer.apple.com/documentation/appstoreserverapi
Apple Developer API 의 응답은 보통 JWS 토큰으로 수신된다. JWS 토큰이란 어떤 데이터형태인지 먼저 정리가 필요하다. JWS를 표준으로 정의하고있는 RFC7515문서(https://datatracker.ietf.org/doc/html/rfc7515#section-3) 를 참고하여 정리했다. 애플쪽에서 보내오는 정보는 모두 아래 JWS 토큰 포맷이므로 이에 맞춰서 검증 후 디코딩해 사용하면 된다!
JWS(JSON Web Signature)
1. header, payload, signature 가 .를 구분자로 차례로 이어져있다.
2. Json 데이터구조를 사용한다(header, payload에서 json 구조로 되어있음)
3. base64 url encoding 처리 되어있어 URL-safe하다. 간략하게 추가설명하자면... base64로만 인코딩하면 인코딩내용에 +나 / 등이 들어갈 수 있는데, base64 url encoding의 경우는 요런것들을 - , _ 등으로 인코딩하여 url에서 안전하게 사용할 수 있도록 인코딩하는 것을 의미한다.
4. digital signature 되어있다. 요것의 의미는.. 헤더와 페이로드 부분을 해싱한 후, 비밀키로 해당 해싱결과를 암호화하였다는 의미이다. 수신자의 경우 이 signature 부분을 송신자의 공개키로 복호화한후 헤더+페이로드의 해싱값과 비교하여 내용물이 바뀌지 않고 + 송신자가 보낸게 맞는지를 확정할 수 있게된다.
애플쪽에 데이터를 보낼때도 JWS 토큰을 헤더에 넣어 보내야 한다.
1. JWS 헤더에 private key id 를 명시
2. 시그니처를 만들때 내용물의 해시코드를 애플에서 발급받은 우리 어플리케이션의 비밀키로 ES256 사용하여 암호화해 생성
당연하겠지만, 애플쪽에선 우리가 보낸 JWS헤더의 private key id 를 보고 우리앱에서 보낸 JWS라는 것을 알아채고, 시그니처를 우리 앱의 private key 에 대응되는 키로 복호화하여 검증을 완료할 것으로 생각된다.