Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

T-10855 [feat] GET /authorize API 구현 #260

Merged
merged 42 commits into from
May 31, 2024
Merged

T-10855 [feat] GET /authorize API 구현 #260

merged 42 commits into from
May 31, 2024

Conversation

KWY0218
Copy link
Contributor

@KWY0218 KWY0218 commented May 29, 2024

Related Issue 🚀

Work Description ✏️

  1. external 모듈 내 소셜 로그인 기능 구현

PR Point 📸

  1. Auth Controller 내부에서 Social Login Manger를 이용하여 소셜 로그인을 진행하려 합니다.
    추상화를 통해 공통된 로직을 분리하려 했으나, 해당 방식은 확장성을 방해한다고 생각하여
    소셜 로그인 별로 class 를 만들었습니다.
    [ex. 소셜 로그인 변경 or 소셜 로그인 중 open id 방식을 지원하지 않을 수 있음 ]

  2. 비즈니스 로직
    c826462 해당 커밋 메시지처럼 구현했습니다..!

  3. 플랫폼 인가 코드 저장을 위한 concurrent hash map
    redis를 아직 사용하지 않기 때문에 concurrent hash map 내부에 인가코드를 저장했습니다.
    해당 map은 플랫폼 인가 코드를 단 1회만 사용할 수 있도록 만들기 위해서 인가 코드를 잠시 저장하는 용도입니다.
    /token API 시 인가 코드가 MAP에 있는지 확인 후, 해당 인가 코드를 제거할 것입니다.

  4. 에러 메시지 및 함수 명 작성이 명시적인지 궁금합니다.

KWY0218 added 5 commits May 29, 2024 20:42
애플 로그인, 구글 로그인 시 필요한 oauth 관련 상수들을 정의했습니다
jsonwebtoken 라이브러리는
애플 로그인시 필요한 client secret key를 생성할 때 사용합니다

nimbusds 라이브러리는
SocialLoginManager 내의 getUserInfo 시 id token 을 검증할 때 사용합니다

bouncycastle 라이브러리는
애플 로그인 시 private key를 생성할 때 사용합니다
클라이언트로 받은 google code를 통해
google open id token을 반환 받습니다
클라이언트로 받은 apple code를 통해
client secret key를 만든 이후
해당 값을 사용하여 apple open id token을 반환 받습니다
애플 로그인과 구글 로그인을 도와주는 역할을 합니다

getIdTokenByCode 함수는
social type을 매개변수로 받아서
해당 type의 소셜 로그인을 실행한 뒤 id token을 반환합니다

getUserInfo 함수는
id token을 매개변수로 받아서
payload를 확인하여 sub에 담긴 값을 반환합니다
@KWY0218 KWY0218 added the feat 기능 구현 label May 29, 2024
@KWY0218 KWY0218 requested a review from yummygyudon May 29, 2024 11:55
@KWY0218 KWY0218 self-assigned this May 29, 2024
@KWY0218 KWY0218 linked an issue May 29, 2024 that may be closed by this pull request
Copy link

height bot commented May 29, 2024

This pull request has been linked to 1 task:

💡Tip: Add "Close T-10855" to the pull request title or description, to a commit message, or in a comment to mark this task as "Done" when the pull request is merged.

@KWY0218 KWY0218 requested a review from yeseul106 May 29, 2024 12:09
@KWY0218 KWY0218 changed the title T-10855 [feat] T-10855 [feat] GET /authorize API 구현 May 29, 2024
KWY0218 added 10 commits May 29, 2024 22:53
해당 값이 변경되었을 때 서버를 재배포 하는 일이 발생하지 않도록
각 팀 별로 client id와 redirect uri를 config가 아닌 테이블로 저장한다
인가 코드 발급시 사용되는
성공 메시지, 실패 메시지, 에러 model 구현 및 정의
APPLE 또는 GOOGLE 외의 값이 들어올 때 false를 반환한다
플랫폼 인가 코드 발급 시 사용하기 위해 의존성 추가
해당 api 실패시 전달되는 메시지 내용 수정
1. query parameter로 들어오는 값이 null 인지 확인한다.
2. 입력한 client id와 redirect uri가 존재하는지 확인한다.
3. 입력한 type 값이 유효한지 확인한다.
4. social type 과 code를 이용하여 social login 이후 user id를 불러온다.
5. user id 기반으로 platform 인가코드를 생성하고 반환한다.
checkRegisteredTeamOAuthInfo()
-> 입력한 client id와 redirect uri가 동시에 존재하는지 여부를 반환한다.

getSocialUserInfo()
-> social manager를 통해 social login 진행 후, user social id를 반환한다.

getUserId()
-> social id 및 social type에 해당하는 user id를 조회 후, 반환한다.

String generatePlatformCode(Long userId)
-> 만료 시간이 5분인 platorm code를 반환한다.
400 시 에러 내용 줄바꿈 적용
Copy link
Member

@yummygyudon yummygyudon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@KWY0218 고생 많으셨어요!! ☺️

몇 몇 부분은 P2 ~ P3 리뷰도 있지만
작고 소중한(?) 사소한 P4 리뷰도 몇 개 있으니 편하게 봐주세요!!


import static jakarta.persistence.GenerationType.IDENTITY;

@Entity
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2

  1. 별 다른 Builder를 사용하지 않은 이유가 따로 있을까요??
  2. 해당 객체에 대한 Getter의 필요성은 없을까요?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. 해당 엔티티는 db를 통해 insert하기 때문에 save 등을 사용하지 않아 entity를 생성할 일이 없기 때문에 만들지 않았습니다

  2. getter 또한 jpa query문을 통해 충분히 검증할 수 있기 때문에 만들지 않았습니다

위 builder 및 getter 모두 추후 필요한 상황이 생긴다면 만들 것 같습니다.

operation-external/build.gradle Show resolved Hide resolved
KWY0218 added 3 commits May 30, 2024 21:35
404 에러 문구 넘버링 & 개행 처리 적용
request mapping을 제거하고 get mapping으로 버저닝 적용
KWY0218 added 2 commits May 30, 2024 21:52
플랫폼 인가 코드를 검증할 때,
client id와 redirect uri가 일치하는지 검증하기 위해
issuer 내에는 client id를
aud 내에는 redirect uri를 기입했다
Copy link
Member

@yummygyudon yummygyudon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인 마쳤습니다!!
고생 정말 많으셨어요!! ❤️

별건 아니지만.. 사소한 개행에 대한 리뷰에 대한 답변이 없는 듯하여
이에 대한 원용님의 의견이 궁금하다는 말과 함께 마치도록 하겠습니당ㅋㅋ

@KWY0218
Copy link
Contributor Author

KWY0218 commented May 31, 2024

@yummygyudon
운영 프로덕트 팀 코딩 컨밴션을 다시 보니 제가 어기고 있었네요..!
개행 및 한줄 if 문 모두 반영했습니다!!

@KWY0218 KWY0218 added this pull request to the merge queue May 31, 2024
Merged via the queue into develop with commit 4f2dab2 May 31, 2024
1 check passed
@KWY0218 KWY0218 deleted the feat/T-10855 branch May 31, 2024 09:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feat 기능 구현 size/XL
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[FEAT] GET /authorize API 구현
2 participants