-
Notifications
You must be signed in to change notification settings - Fork 1
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
Conversation
애플 로그인, 구글 로그인 시 필요한 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에 담긴 값을 반환합니다
This pull request has been linked to 1 task:
|
해당 값이 변경되었을 때 서버를 재배포 하는 일이 발생하지 않도록 각 팀 별로 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 시 에러 내용 줄바꿈 적용
There was a problem hiding this 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 리뷰도 몇 개 있으니 편하게 봐주세요!!
operation-api/src/main/java/org/sopt/makers/operation/auth/api/AuthApi.java
Outdated
Show resolved
Hide resolved
operation-api/src/main/java/org/sopt/makers/operation/auth/api/AuthApiController.java
Outdated
Show resolved
Hide resolved
operation-api/src/main/java/org/sopt/makers/operation/auth/api/AuthApiController.java
Outdated
Show resolved
Hide resolved
operation-api/src/main/java/org/sopt/makers/operation/auth/api/AuthApiController.java
Outdated
Show resolved
Hide resolved
operation-api/src/main/java/org/sopt/makers/operation/auth/api/AuthApiController.java
Outdated
Show resolved
Hide resolved
operation-domain/src/main/java/org/sopt/makers/operation/auth/domain/TeamOAuthInfo.java
Outdated
Show resolved
Hide resolved
|
||
import static jakarta.persistence.GenerationType.IDENTITY; | ||
|
||
@Entity |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
P2
- 별 다른 Builder를 사용하지 않은 이유가 따로 있을까요??
- 해당 객체에 대한 Getter의 필요성은 없을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
-
해당 엔티티는 db를 통해 insert하기 때문에 save 등을 사용하지 않아 entity를 생성할 일이 없기 때문에 만들지 않았습니다
-
getter 또한 jpa query문을 통해 충분히 검증할 수 있기 때문에 만들지 않았습니다
위 builder 및 getter 모두 추후 필요한 상황이 생긴다면 만들 것 같습니다.
operation-domain/src/main/java/org/sopt/makers/operation/user/domain/SocialType.java
Outdated
Show resolved
Hide resolved
operation-external/src/main/java/org/sopt/makers/operation/client/social/GoogleSocialLogin.java
Outdated
Show resolved
Hide resolved
404 에러 문구 넘버링 & 개행 처리 적용
request mapping을 제거하고 get mapping으로 버저닝 적용
플랫폼 인가 코드를 검증할 때, client id와 redirect uri가 일치하는지 검증하기 위해 issuer 내에는 client id를 aud 내에는 redirect uri를 기입했다
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
확인 마쳤습니다!!
고생 정말 많으셨어요!! ❤️
별건 아니지만.. 사소한 개행에 대한 리뷰에 대한 답변이 없는 듯하여
이에 대한 원용님의 의견이 궁금하다는 말과 함께 마치도록 하겠습니당ㅋㅋ
operation-domain/src/main/java/org/sopt/makers/operation/user/domain/SocialType.java
Outdated
Show resolved
Hide resolved
operation-api/src/main/java/org/sopt/makers/operation/auth/api/AuthApiController.java
Show resolved
Hide resolved
operation-api/src/main/java/org/sopt/makers/operation/auth/api/AuthApiController.java
Outdated
Show resolved
Hide resolved
@yummygyudon |
checkRegisteredTeamOAuthInfo가 false 일 때 throw 하도록 로직 수정
spring에서 쿼리 파라미터가 null일 때 400 에러를 자동으로 반환함
apple secret key 생성 로직 구현
Related Issue 🚀
Work Description ✏️
PR Point 📸
Auth Controller 내부에서 Social Login Manger를 이용하여 소셜 로그인을 진행하려 합니다.
추상화를 통해 공통된 로직을 분리하려 했으나, 해당 방식은 확장성을 방해한다고 생각하여
소셜 로그인 별로 class 를 만들었습니다.
[ex. 소셜 로그인 변경 or 소셜 로그인 중 open id 방식을 지원하지 않을 수 있음 ]
비즈니스 로직
c826462 해당 커밋 메시지처럼 구현했습니다..!
플랫폼 인가 코드 저장을 위한 concurrent hash map
redis를 아직 사용하지 않기 때문에 concurrent hash map 내부에 인가코드를 저장했습니다.
해당 map은 플랫폼 인가 코드를 단 1회만 사용할 수 있도록 만들기 위해서 인가 코드를 잠시 저장하는 용도입니다.
/token
API 시 인가 코드가 MAP에 있는지 확인 후, 해당 인가 코드를 제거할 것입니다.에러 메시지 및 함수 명 작성이 명시적인지 궁금합니다.