-
Sign In with Apple REST API 문서 정리프로젝트/WebRTC 화상통화 프로젝트 2023. 5. 16. 00:01
[1] Sign In with Apple REST API 문서 정리
개요
Apple 로그인을 구현하기 위해 공식 문서를 읽어보면서 정리하는 시간을 가져보고자 합니다.
https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_rest_api
Apple 로그인으로 사용자 인증하기
Apple ID Server로부터 유저 정보 받기
사용자를 성공적으로 인증한 후 서버는 ID 토큰, 인증 코드 및 사용자 식별자를 앱에 반환합니다.
ID 토큰은 JSON 웹 토큰(JWT)이며 다음과 같은 클레임을 포함합니다- iss : ID 토큰을 발급하는 주체
- sub : 사용자 고유 식별자
- aud : client_id
- iat : 발급일
- exp : 만료일
- nonce : 임의의 문자열
- nonce_supported : nonce를 지원하는지 않는지 여부
- email : 이메일주소
- is_private_email : 이메일주소가 프록시 주소인지 확인하는 여부
Identity Token이 올바른지 식별하는 방법
- JWS가 E256으로 서명되었는지 확인한다.
- nonce를 검증한다.
- iss 필드에 https://appleid.apple.com 가 포함되었는지 확인한다.
- aud 필드에 client_id가 포함되었는지 확인한다.
- 토큰의 exp(만료일)이 만료되었는지 확인한다.
Apple의 공개키로 토큰 서명 확인하기
GET https://appleid.apple.com/auth/keys
성공하면 HTTP 상태 코드가 200(OK)이고 JWKSet.Keys 객체에 Apple의 공개 키가 포함됩니다.
Authorization grant code 받는 예시
GET https://appleid.apple.com/auth/authorize
Query Parameters
- client-id
- redirect_uri
- response_type = code
토큰 생성하거나 검증하기
POST https://appleid.apple.com/auth/token
앱에 전달된 권한 부여 코드를 확인하여 토큰을 받거나 기존 새로 고침 토큰의 유효성을 검사합니다.
HTTP BODY에는 form-data 인자들이 필요합니다. (Content-Type: application/x-www-form-urlencoded)
- client_id
- client_secret
- code
- grant_type
- refresh_token
- redirect-url
Authorization grant code를 검증하고 AcceessToken을 응답받는 예시 CURL
curl -v POST "https://appleid.apple.com/auth/token" \ -H 'content-type: application/x-www-form-urlencoded' \ -d 'client_id=CLIENT_ID' \ -d 'client_secret=CLIENT_SECRET' \ -d 'code=CODE' \ -d 'grant_type=authorization_code' \ -d 'redirect_uri=REDIRECT_URI'
응답 예시
{ "access_token": "adg61...67Or9", "token_type": "Bearer", "expires_in": 3600, "refresh_token": "rca7...lABoQ", "id_token": "eyJra...96sZg" }
Client Secret 생성하는 방법
Apple로 로그인하려면 각 유효성 검사 요청을 승인하기 위해 JWT가 필요합니다.
토큰을 만든 다음 Apple Developer에서 다운로드한 개인 키(private key = .p8)로 서명해야 합니다.
서명된 JWT를 만들기 위한 절차
- JWT header 생성
- alg : 토큰을 서명하는 데 사용되는 알고리즘입니다. Apple로 로그인하는 경우 ES256을 사용합니다
- kid : 개발자 계정과 연결된 Apple 개인 키로 로그인하기 위해 생성된 10자 키 식별자입니다.
- JWT payload 생성
- iss : 개발자 계정과 연결된 10자리의 팀 ID
- iat : 발급자 등록 클레임은 클라이언트 비밀을 생성한 시간을 UTC 기준 에포크 이후 초 단위로 나타냅니다.
- exp : 만료 시간 등록 클레임은 클라이언트 비밀이 만료되는 시간 또는 그 이후를 식별합니다. 이 값은 서버의 현재 UNIX 시간에서 15777000(초 단위로 6개월) 보다 크지 않아야 합니다.
- aud : client-secret을 검증하기 위한 서버 (https://appleid.apple.com)
- sub : client_id 사용
- JWT 서명
- SHA-256 알고리즘으로 서명
토큰 무효화
POST https://appleid.apple.com/auth/revoke
사용자가 더 이상 앱과 연결되지 않은 경우 해당 사용자의 토큰 및 연결된 사용자 권한을 무효화합니다.
'프로젝트 > WebRTC 화상통화 프로젝트' 카테고리의 다른 글
Rest API로 Apple 로그인을 구현 (0) 2023.06.06 JPA 동시성 문제 해결하기 (트랜잭션과 락) (0) 2022.08.09 nginx에 SSL 인증서 적용하기 (0) 2022.08.08 Jenkins로 Gitlab CI/CD 구축하기(Spring + MySQL + JenKins + Redis + Nginx) (0) 2022.08.06 letsencrypt 인증서 발급하고 OpenVidu에 적용하기 (0) 2022.08.05