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

feat: Security Github OAuth2.0 #7

Closed
5 tasks done
toychip opened this issue Nov 28, 2023 · 1 comment · Fixed by #8
Closed
5 tasks done

feat: Security Github OAuth2.0 #7

toychip opened this issue Nov 28, 2023 · 1 comment · Fixed by #8
Assignees
Labels
✨ Feature 새로운 기능 추가 임준형
Milestone

Comments

@toychip
Copy link
Member

toychip commented Nov 28, 2023

GitHub OAuth2 연결

Resources Owner가 깃허브에 로그인 후 Access Token return


TODO

  • CustomOAuth2User
  • OAuth2User 구현
    Member와 GithubUserInfo 로 구성

  • CustomOAuth2UserService
  • DefaultOAuth2UserService 구현
    loadUser() : 로그인 성공한 유저 정보를 반환하는 메서드

  • CustomSuccessHandler
  • SimpleUrlAuthenticationSuccessHandler 구현
    로그인한 사람의 정보를 가져와 DB에 없다면 회원가입, 있다면 유지. (그대로 유저 정보 SecurityContextHolder에 자동 저장), 로그인한 사람의 정보와 jwt token, redirectUri을 반환

  • JwtAuthenticationFilter
  • OncePerRequestFilter 구현
    공개 Uri인지 검증 후, 비공개라면 jwt token 검사 진행

  • JwtProvider
    jwt token 생성, jwt token 유효성 검증, jwt token 유저 정보 확인
@toychip toychip added ✨ Feature 새로운 기능 추가 임준형 labels Nov 28, 2023
@toychip toychip self-assigned this Nov 28, 2023
toychip added a commit that referenced this issue Nov 28, 2023
toychip added a commit that referenced this issue Nov 28, 2023
@toychip toychip added this to the 1차 배포 milestone Nov 28, 2023
@toychip toychip changed the title feat: Spring Security oauth2.0 + Redis feat: Spring Security oauth2.0 Nov 28, 2023
toychip added a commit that referenced this issue Nov 28, 2023
@toychip toychip changed the title feat: Spring Security oauth2.0 feat: Spring Security Github oauth2.0 Nov 28, 2023
@toychip toychip changed the title feat: Spring Security Github oauth2.0 feat: Security Github OAuth2.0 Nov 29, 2023
toychip added a commit that referenced this issue Nov 29, 2023
toychip added a commit that referenced this issue Nov 29, 2023
toychip added a commit that referenced this issue Nov 29, 2023
UsernamePasswordAuthenticationToken을 직접 생성하지 않고,CustomOAuth2UserService의 loadUser메서가 OAuth2User를 구현한 CustomOauth2User를 반환하여 자동으로 OAuth2AuthenticationToken가 생성되도록 설정하여 오류 해결
toychip added a commit that referenced this issue Nov 29, 2023
기존 Security 설정이 없어 UUID로 두었던 것을 SecurityContextHolder에서 값을 꺼내어 채우는 로직 추가
toychip added a commit that referenced this issue Nov 29, 2023
pull Request 하기 전, 팀원들의 개발 편의를 위해 암호화 비활성화
@toychip toychip linked a pull request Nov 29, 2023 that will close this issue
@toychip
Copy link
Member Author

toychip commented Dec 27, 2023

  • Breaking change login 수정 #23
    oauth 2.0으로 로그인하여 setContextHolder를 안해도 되는 줄 알았으나, 우리의 서비스는 깃허브로 로그인 후, JWT Token을 활용하여 로그인하기 때문에, setContextHolder에다가 UsernamePasswordAuthenticationToken를 등록해줘야하는 작업을 해당 이슈에서 진행했습니다.

toychip added a commit that referenced this issue Jan 23, 2024
* Update issue templates

* feat: BaseTimeEntity (#3)

* feat: BaseEntity (#3)

* feat: Cors Setting (#3)

* feat: notSession, requestMatchers security setting (#3)

* feat: Member Entity 초안 (#3)

* feat: CustomOauth2User (#7)

* feat: CustomOAuth2UserService (#7)

* refactor: Apply Single Responsibility Principle (#7)

* feat: JwtAuthenticationFilter 초안 (#7)

* feat: GithubOAuthController (#7)

* feat: GithubUserInfo (#7)

* feat: CustomOAuthSuccessHandler 초안 (#7)

* refactor: 원시값 상수화 및 변수명 변경 (#7)

* feat: JwtProvider - AccessToken 발급 method (#7)

* feat: CustomOAuthSuccessHandler redirect 구현 (#7)

* refactor: domain Member 폴더 구조 변경 (#7)

* feat: Access Token 검증 구현 (#7)

* feat: JwtToken으로부터 유저의 정보 추출 후 검증 구현 (#7)

* feat: 검증 메서드와 JwtFilter SecurityConfig에서 적용 (#7)

* fix: login, oauth 경로를 열어 무한 리다이렉트 버그 수정 (#7)

* refactor: method 분리 및 final 키워드 추가 (#7)

* fix: 무한 리다이렉트 오류 해결 (#7)

UsernamePasswordAuthenticationToken을 직접 생성하지 않고,CustomOAuth2UserService의 loadUser메서가 OAuth2User를 구현한 CustomOauth2User를 반환하여 자동으로 OAuth2AuthenticationToken가 생성되도록 설정하여 오류 해결

* feat: BaseEntity auditorProvider (#7)

기존 Security 설정이 없어 UUID로 두었던 것을 SecurityContextHolder에서 값을 꺼내어 채우는 로직 추가

* setting: allRequest permitAll (#7)

pull Request 하기 전, 팀원들의 개발 편의를 위해 암호화 비활성화

* feat: Error default setting (#9)

ErrorType, ApiException 초안

* feat: ExceptionHandler, ApiExceptionResponse (#9)

에러 핸들러, 에러 응답 클래스 추가

* feat: Error Message Convention (#9)

* feat: ErrorType _CANT_TRANCE_INSTANCE (#9)

인스턴스화 불가 예외 추가

* feat: ErrorType _SERVER_USER_NOT_FOUND (#9)

로그인이 성공한 소셜 로그인 유저가 DB에 존재하지 않는 서버의 예외 추가

* feat: ErrorType _TOKEN_EXPIRED (#9)

Jwt Token 유효 기간 만료 예외 추가

* feat: ErrorType _JWT_PARSING_ERROR (#9)

Jwt Parsing 예외 추가

* feat: ErrorType _USER_NOT_FOUND (#9)

제공된 토큰으로 사용자가 없을 때의 예외 추가

* feat: DataBaseConfig (#11)

QueryDSL 의존성 추가 및 JPAQueryFactory Spring Bean 등록

* refactor: Move oauth classes to security directory (#11)

oauth 관련 클래스들을 security folder 경로로 리팩토링

* feat: SecurityUtil CurrentMember method (#11)

현재 사용자의 정보를 가져오는 SecurityUtil, currentMember method 생성

* feat: SwaggerConfig (#11)

명세서 제공을 위한 의존성 및 SwaggerConfig 추가

* feat: api 요청 처리 기능 추가

* feat: 구글 검색 엔진을 이용한 블로그 조회 기능 추가

* feat: comment, post (#5)

* feat: Solved Api User Bio (#13)

SolvedApi 에 백준 아이디로 유저 정보 요청하는 기능 추가

* feat: 필요한 내용 response로 반환 (#4)

* feat: 대댓글,댓글 수 카운트 기능 추가 (#5)

* refactor: controller 불필요한 내용 수정

* Revert "refactor: controller 불필요한 내용 수정"

This reverts commit 1c13c21.

* Revert "Revert "refactor: controller 불필요한 내용 수정""

This reverts commit c1fc120.

* refactor: dto 분리 (#5)

PostDto -> PostCreateRequest, PostResponse로 분리

* feat: SwaggerConfig (#11)

명세서 제공을 위한 의존성 및 SwaggerConfig 추가

* feat: SecurityUtil CurrentMember method (#11)

현재 사용자의 정보를 가져오는 SecurityUtil, currentMember method 생성

* refactor: Move oauth classes to security directory (#11)

oauth 관련 클래스들을 security folder 경로로 리팩토링

* feat: DataBaseConfig (#11)

QueryDSL 의존성 추가 및 JPAQueryFactory Spring Bean 등록

* fix: create Post (#5)

setter 제거 및 converter 도입

* fix: get single record Post (#5)

post 단건 조회 로직 수정 및 converter 재활용, PostResponse memberId -> writerId로 변경

* fix: delete Post (#5)

* feat: search condition & paging with Querydsl (#5)

Querydsl을 활용하여 검색 조건에 맞게 검색 후 페이징 처리 - dto로 조회하여 최적화

* fix: search condition & paging count 추가 및 최적화 적용 (#5)

포함하지 않았던 count query를 repository에서 계산 후 서비스가 사용

* refactor: 미사용 method 제거, final 키워드 추가 (#5)

* refactor: NoArgsConstructor 접근 제한자 변경, FetchType 설정 변경 (#5)

* refactor: NoArgsConstructor 접근 제한자 변경 (#5)

* refactor: comment dto 분리 (#5)

* refactor: 변경된 파일 이름 업데이트 (CommentDto.Response->CommentResponse) (#5)

* fix: Post edit (#5)

setter를 사용하지 않고 editor를 사용하여 수정

* refactor: Post move filepath, ListResponse to record, method isolation (#5)

dto -> request, response 파일 경로 분리, PostListResponse record로 변경, method 책임 분리, Page 변환 메서드 Converter로 이동

* refactor: 에러 컨벤션 적용, setter 제거 (#5)

* refactor: SuccessResponse 적용, 페이징 처리 (#5)

* docs: Post Create Swagger 명세서 작성 (#5)

PostApiController, PostCreateRequest 명세서 작성

* refactor: rename folder, Get Post dto ModelAttribute, open public url (#5)

검색 필드 객체를 RequestBody가 아닌 ModelAttribute로 바꿔 검색 오류 해결, 잘못된 폴더명 변경, 모든 경로 jwt에서 public으로 변경

* feat: 티어별 게시판을 하나의 Post에서 관리 (#5)

Post 필드에 티어정보를 추가. 생성시 티어정보의 필드가 필수로 넘어오도록 설정

* refactor: 파일 이름 변경(#5)

* feat: PostResponse 작성일 추가 (#5)

TimeUtil 추가하여 이를 Post에서 사용하고, 작성일을 제공하는 메서드 추가

* feat: S3 File upload (#5)

S3 연결 client 추가 및 사진 업로드 추가

* feat: Image Entity, post에서 사용 (#5)

post 업로드시 s3에 저장 후 imageurl DB 저장 후 PostResponse에 함께 응답

* refactor: 누락 final 키워드 추가 및 post, image 파일 경로 분리 (#5)

* feat: image 수정 (#5)

이미지 저장 후 url로 반환되므로, 변경 감지 불가능, 전부 삭제 후 전부 업로드

* fix: Post Single Read Fetch Join (#5)

* feat: 티어별 게시판 접근 검증 (#5)

Member Tier 도입, PostTier가 List<Tier>를 가짐으로써 포함하는지 확인하고, 이를 확인하여 자격 검증

* refactor: 경로 오류 해결 (#5)

* docs: 단일 게시글 조회 Swagger (#5)

* fix: Post Entity ImageList 초기화하여 오류 해결 (#5)

* refactor: BEGINNER Enum에 맞게 이름 수정 (#5)

* fix: Swagger 오류 수정 (#5)

JwtFilter에서 Swagger가 붙는 경로 open, 의존성 수정

* fix: 단일 Post 응답 순환 오류 해결 (#5)

PostResponse 에서 List<Image> 엔티티가 아닌 List<ImageResponse>로 수정하여 Image에서 Post, Member를 순환 참조하는 오류 해결

* docs: 게시판 수정 Swagger (#5)

* feat: 게시판 타입 카운트 누락 쿼리 추가 (#5)

* feat: Comment Create (#5)

부모 댓글 유무를 확인하고, 존재할 때와 존재하지 않을 때를 구분하여 Comment 생성

* refactor: 배열을 json으로 변환 (#17) (#18)

* refactor: CommentService 변수명, 메서드 보완 (#5)

변수명, 메서드명 보안, 누락 final 키워드 추가

* feat: Comment 작성 자격 검증 (#5)

CommentCreateRequest에서 PostTier를 받아서, 현재 사용자의 티어로 자격 검증하는 메서드 추가 postService.validateAuthority 메서드 활용

* docs: Comment Create Swagger (#5)

* refactor: CreateComment 메서드 분리 (#5)

* refactor: CreateCommentRequest Tier (#5)

CreateCommentRequest에서 Tier를 직접적으로 받는 것이 아닌, 찾는 Post에서 Tier를 꺼내도록 수정

* fix: PostTier 권한 (#5)

해당 게시판 등급의 티어만 가능하도록 하는 것이 아닌, 해당 게시판 등급 티어 이상으로 변경

* refactor: PostCreateRequest Swagger, Comment folder rename (#5)

* feat: Comment Edit 구현 (#5)

* refactor: 누락 final 코드 추가 (#5)

* fix: ErrorType merge 누락 정보 추가 (#13)

* feat: RedisConfig (#13)

* feat: RedisUtil (#13)

* feat: Get GitHub Public Repository List (#13)

GitHub Api를 활용하여 특정 유저의 pulbic Repository에서 description 추출

* refactor: AuthorizationService에서 GitHubApiService 분리 (#13)

* refactor: SolvedAcApiService HttpClient -> WebClient (#15)

* feat: Authorization use SolvedAcApi && GitHubRepo (#13)

GitHub TaveShot Repo로부터 백준 닉네임을 추출하여 SolvedAcApi로부터 bio 추출, bio와 github 이름이 같은지를 확인하여 인증

* feat: SolvedUserInfo field Tier (#13)

Tier 정보 추가 및 SolvedUserInfo 객체를 반환하도록 수정

* feat: Calculate Tier from SolvedAcApi (#13)

SolvedApi로부터 숫자로 된 Tier 정보를 받고, Tier에 맞게 반환하는 메서드 추가

* feat: MemberEditor (#13)

SolvedApi로부터 받은 정보를 Member 객체에 추가

* feat: AuthorizationService 인증 후 GitHubInfo 정보 추가 (#13)

* feat: 인증 후 변경된 정보를 응답으로 추가 (#13)

* docs: AuthorizationController Swagger (#13)

* fix solvedapi githubapi exception handling (#21)

* feat: SolvedAcApi getUserInfoFromSolvedAc Error Handling (#13)

* feat: GitHubApi getGithubRepositoryInfo, extractDescription Error Handling (#20)

* fix: comment edit 경로 변수 변경 (#5)

* feat: 특정 게시글 댓글 조회 (#5)

* fix: setAuthentication (#22)

OAuth를 사용하여 로그인하기 때문에 등록을 안해도 되는 줄 알았는데, JWT로 우리만의 로그인 방식을 사용하므로 등록하도록 수정

* fix: 기본값 Builder.Default 적용 (#22)

* fix: Response, Swagger fix (#22)

* feat: comment delete (#5)

* fix: 오류 코드 제거 (#5)

* fix: 잘못된 GitHubOAuth Login 경로 수정 (#22)

* refactor: Validated 어노테이션 추가 (#5)

* fix: edit, delete 티어 검증 추가 (#5)

* refactor: entityToDto CommentConverter 클래스로 분리 (#5)

* refactor: 필요없는 검증 제거 (#5)

comment를 수정, 삭제할 때 post를 갖고올 필요 없이 comment Index를 활용하여 접근

* refactor: Comment 변수명 변경 Comment content로 변경 (#5)

Comment의 Comment filed Content로 변경

* refactor: 삼항연산자 제거 (#5)

* refactor: new로 생성자 제거, Builder 패턴으로 변경 (#5)

* feat: 최상단 Comment 페이징 쿼리 (#5)

* fix: 순환 참조와 무한반복이 일어나지 않게 field 변경 (#5)

List<Comment>가 아닌, parentId를 둠으로써 순환참조 버그 해결

* fix: 페이징 처리한 댓글 조회 및 타입 변경 (#5)

Page 타입이 아닌, CommentListResponse로 반환

* docs: 잘못된 명세서 삭제 (#5)

잘못된 에러 타입 제거, 추후 자세한 에러 명세로 수정

* fix: Login url, redirect url

잘못된 로그인, 로그인 성공 후 경로 수정

* 29 breaking change token response header에서 parameter로 변경 (#30)

* fix: comment child Build.Default apply (#29)

* fix: token header -> parameter (#29)

* refactor: 해답 블로그 response 데이터 추가 (#31)

* refactor: 블로그 타입 추가 (#27)

* refactor: 블로그 타입 추가 (#27)

* fix: s3 file명 중복시 확장자 유지 (#32)

* fix: 누락 content값 해결 및 writer gitLoginId로 변경 (#32)

* docs: PostCreateRequest 잘못된 티어 설명 수정 (#32)

* fix: 쿼리 수정, typemissmatch 오류 해결 (#32)

컬렉션을 QDto가 아닌 엔티티로 조회 후 convert하여 오류 해결

* fix: post 단건 조회 잘못된 쿼리 수정 (#32)

* fix: patchMapping ModelAttribute로 수정 (#32)

* feat: 페이징 조회시 사이즈 검증 추가 (#32)

* refactor: 페이지 카운트 0인 경우 검증 추가 (#32)

* 34 feat 해답 블로그 새로고침 기능 구현 (#35)

* feat: 새로고침 기능 구현 및 파라미터 추가 (#34)

* fix: 허용 method 추가 (#34)

* fix: CORS 오류 해결 (#36)

* refactor: jwt 암호화 로직 수정 (#38)

memberId에서 gitId(Long)로 수정

* fix: 기본 예외처리에서 member로 바꿔 에러 로그 출력되도록 수정 (#38)

* fix: solvedAcApi query parameter로 수정하여 해결 (#38)

* fix: post와 comment GET 요청 통합 (#38)

* refactor: 폴더 구조 변경 (#38)

* fix: 백준 저장되지 않는 로직 수정 (#38)

solvedAcApi에서 받은 bio(GitHubLoginId)가 아닌 solvedAcApi 이름을 저장

* feat: 조회 수 기능 추가 (#38)

* refactor: 메서드 순서 변경 및 userId를 ViewService에서 꺼내도록 수정 (#38)

* fix: EnableJpaAuditing Member 객체가 아닌 GitLoginId로 수정 (#38)

* Test: Comment, Post 예시 데이터 생성 (#38)

* fix: BaseEntityConfig 잘못된 캐스팅 수정 (#38)

CustomOauth2User가 아닌, Member로 수정하여 오류 해결

* fix: 조회 수 post도 증가하도록 수정 (#38)

* Test: Comment, Post DataInit 통합하여 테스트 순서 설정 (#38)

* fix: 이미지 미첨부시 500 오류 해결 (#40)

* fix: 댓글 수 기능 추가 및 데이터 뻥튀기 해결 (#40)

* Test: Member 객체를 ContextHolder에 등록 (#40)

* refactor: Test에서 ContextHolder를 사용하여 Service에서 테스트 전용 메서드 제거 (#40)

* fix: image가 존재할때만 생성 및 수정 (#40)

* fix: 단건 post를 못찾았을 경우 예외처리 적용 (#40)

* 26 feat 사용자에게 맞는 알고리즘 문제 추천 (#42)

* refactor: 블로그 타입 추가 (#27)

* refactor: 블로그 타입 추가 (#27)

* feat: 백준에 필요한 유저정보 크롤링하여 객체 저장 (#26)

* feat: lambda함수를 호출하여 사용자 기반 문제 추천리스트 반환 (#26)

* feat: Post 단건 조회 작성자 프로필 이미지 추가 (#43)

단건 Post 조회시 Member를 fetch join하여 프로필이미지를 검색

* feat: Post 단건 조회 댓글 작성자 프로필 이미지 추가 (#43)

단건 Comment 조회시 Member를 fetch join하여 프로필이미지를 검색

* feat: Auth Failure Handler를 생성하여 JWT Error Custom (#43)

* fix: field가 1개일 때 Builer를 사용하면 역직렬화 오류 발생 (#43)

@Jacksonized를 사용하여 역직렬화를 진행하여 해결. @Jacksonized는 @builder와 함께 쓰임

* fix: 마지막 페이지 인덱스 totalPosts - 1이하로 수정하여 해결 (#43)

* fix: post 페이징 조회시 인덱스 내림차순 적용 (#43)

* feat: 티어별 사용자 수를 가진 entity와 repositoy 생성 (#44)

* fix: model 결과만이 아닌 사용자 정보도 포함하여 response (#44)

* ci/cd: Dockerfile setting (#47)

* ci/cd: feat ecs-template (#47)

* ci/cd: feat HealthCheckController (#47)

* ci/cd: feat tesk_definition (#47)

* ci/cd: custom workflow (#47)

* ci/cd: 암호화한 채 application.yml 세팅 (#47)

* ci/cd: 배포 전 프로덕션 환경으로 세팅 (#47)

* fix: workflow -> workflows rename (#51)

* fix: task_definition

* fix: heath 경로 jwt 필터에서 통과하도록 수정

* ci/cd cpu, memory upscaling

* ci/cd: application.yml url 직접 입력

* test: log SPRING_DATASOURCE_USERNAME

* ci/cd: workflows Decode application.yml

* ci/cd: Search Url Open

* ci/cd: task_definition.json follow ECS definition

* ci/cd: task_definition.json remove version

* ci/cd: task_definition.json rollback :13

* ci/cd: change devlop-ecs ECS_CLUSTER_SERVICE

* ci/cd: task_definition remove unnecessary key

* fix: AfterLogin url Https apply

* test: log redirect url to front

* ci/ci: 모든 요청을 HTTPS로 처리

* ci/cd: 로그인 경로 HTTPS 강제

* ci/cd: oauth 관련 Url HTTPS 강제

* ci/cd: 모든 요청을 HTTPS로 처리

* test: redirect front log

* test: https remove

* ci/cd: login url https apply

* feat: parameter를 받아 돌려진 모델의 문제에 대한 세부정보를 response에 추가 (#46)

* feat: 문제에 대한 entity를 생성 후 세부 정보를 받아와 response에 추가 (#46)

* refactor: api에 관한 설명 변경 (#46)

* test: https remove

* test: https apply favicon

* test: fix https apply favicon

* test: fix https apply favicon

* test: revert https apply favicon

* ci/cd: CORS 수정하여 CORB 해결시도 1

* ci/cd: rollback CORS

* ci/cd: not decode, encode

* ci/cd: set production environment (#54)

---------

Co-authored-by: wjd4204 <[email protected]>
Co-authored-by: hyeonbin <[email protected]>
@toychip toychip pinned this issue Jan 24, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ Feature 새로운 기능 추가 임준형
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant