사이드 프로젝트에서 애플로그인을 구현할 일이 생겼다.
jwt 에 대해서는 알고 있었고 구현도 해봤지만, OAuth2 는 해본 적이 없고 개념도 안 잡혀있어 같이 공부했다.
JWK 란 ?
Json web key 의 약자.
- JWT 서명 검증을 위한 정보를 담은 JSON 표준이다.
- JWT 를 사용하는 서비스들이 public key 를 제공하기 위해 key 에 접근할 수 있는 URL 을 제공하고 있다.
- 애플의 경우 아래 링크에 접속하면 3개의 키를 제공하는 것을 확인할 수 있다.
다른 OAuth2.0 로그인보다 애플은 간단하지 않다.
다음은 애플의 public key 이다.
JWT 구성 요소에 대해 설명해보면
- "kty" : 키 타입
- "kid" : 앞서 jwt의 header에 kid가 들어가는 경우도 있다고 설명했는데,
여러개의 public key중에서 jwt와 jwk의 kid가 일치하는 것을 사용해서 서명을 verify해야한다.
애플로그인의 경우 3개를 제공하고 있다.
- "alg" : 사용한 알고리즘
- "use" : public key가 어떤 용도로 사용되는지 명시
- "n" : RSA modulus
- "e" : RSA public exponet
요약하면, kid 로 어떤 public key 를 사용할지 결정하고, 그 키의 n, e 값을 디코딩하여 signature 를 verify 할 수 있는 key 로 변환해주어야 한다.
이 과정을 거쳐야 apple 에서 보낸 id_token 을 verify 할 수 있다.
그 후 내가 가지고 있는 private key 를 이용해서 jwt signature 를 완성하고 다시 이걸 apple 에 전달해야 한다.
자, 이제 구현을 해보자.
참고
https://angehende-ingenieur.tistory.com/212?category=1067950
'Backend > 스터디' 카테고리의 다른 글
파이썬으로 개발하는 빅데이터 기반 맛집 추천 서비스 (ft. Django, FastAPI) 초격차 패키지 Online (0) | 2023.12.22 |
---|---|
FastAPI 를 사용한 파이썬 웹 개발 (2) | 2023.12.01 |
Go 프로젝트 디렉토리 구조 잡기 (0) | 2023.04.30 |
도커 환경에서 디버그하기 (0) | 2023.04.30 |
Create go app 시작하기 (0) | 2023.04.28 |