woowacourse-teams / 2023-festa-go

🎪 페스타고, 대학 축제를 더욱 즐겁게!
71 stars 8 forks source link

[BE] feat: AppleOpenIdClient를 추가한다.(#931) #962

Closed BGuga closed 6 months ago

BGuga commented 6 months ago

📌 관련 이슈

✨ PR 세부 내용

  1. AppleOpenIdClient 구현

구조나 테스트 부분에서 KakaoOpenIdClient 를 참고하여 구현하였습니다. 넘어온 OpenId 이 정상적인 값인지 확인하기 위해서는 다음 단계가 필요합니다. [출처]

1. Verify the JWS E256 signature using the server’s public key
2. Verify the nonce for the authentication
3. Verify that the iss field contains https://appleid.apple.com
4. Verify that the aud field is the developer’s client_id
5. Verify that the time is earlier than the exp value of the token

1번은 기존에 있던 KakaoOpenIdPublicKeyLocator 와 동일한 구조를 가진 AppleOpenIdPublicKeyLocator 를 정의해였습니다. 2번은 생략하였습니다. 3,5 번은 JwtParser 를 통해 검증합니다. 4번은 저희의 client-Id와 같은지 validateAudience 메서드를 통해 직접 비교하였습니다.

  1. 기본 닉네임 정책

OpenId의 payload는 다음과 같은 값들이 들어있습니다.

iss
sub
aud
iat
exp
nonce
nonce_supported
email
email_verified
is_private_email
real_user_status
transfer_sub

주목할 점은 UserInfo를 만들기 위한 nickname과 profile을 가지고 있지 않습니다. 따라서 UserInfo를 통해 Member를 만드는 과정에서 nickname이 지정되지 않은 상황에 대한 처리가 필요했는데 이는 profile과 동일하게 Member 도메인 내에서 기본 nickname을 생성하게 하였습니다.

  1. 그 외

infrastructure 내에 class 가 너무 많은 것 같아서 oauth2 와 openid 패키지를 나눠 구분하였습니다. UploadFile의 getUploadUri 가 "https://festago.com2077-06-30/aff16d97-089f-4558-b999-9e5fba54ed8b.png" 처럼 "https://festago.com" 뒤에 "/"가 추가 되지 않아 테스트가 실패하여 추가해주었습니다.

github-actions[bot] commented 6 months ago

Test Results

228 files  228 suites   27s :stopwatch: 761 tests 761 :white_check_mark: 0 :zzz: 0 :x: 780 runs  780 :white_check_mark: 0 :zzz: 0 :x:

Results for commit 45323c8b.

:recycle: This comment has been updated with latest results.

seokjin8678 commented 6 months ago

일요일까지 처리했어야 하는 기능이므로, 리뷰 반영 없이 우선 머지 처리 하도록 하겠습니다! 리뷰에 답글은 닫힌 PR에 달아주시고, 새로운 이슈로 파서 PR 재요청 부탁드립니다!