platanus-kr/plata-anywhere-chat

web: 회원

Closed this issue · 1 comments

Spring Security 기반의 회원 인증, 인가 구현

  • OAuth를 통한 회원 가입 기능
  • web 어플리케이션 자체적으로 회원 가입 기능
  • 세션 사용
  • 세션 클러스터링 백엔드로 Redis 사용
    message와 공유해야함
  • 회원은 일반회원과 운영자가 있다
  • 회원 탈퇴시 해당 아이디로 재가입 불가능 (OAuth, web 회원 둘다)
  • 회원은 그룹을 가진다 part2 이관
  • 회원 탈퇴 기능 part2 이관

시작 전 생각했던 것

1) 예상

  • OAuth2, 자체 회원 체계 구축
  • OAuth2, RESTful, SpringSecurity fromLogin 구현
  • 그룹 구현
  • 회원 탈퇴 구현
  • 세션 클러스터 구현

2) 예상과 달랐던 점

  • Spring Security의 범위를 벗어나는 순간 구현지옥

3) 정말로 필요했던 것

ssa

이 티켓에서 실제로 한 것

  1. Spring Security 사용
  • SecurityFilterChain 구현체 작성
  1. OAuth2 회원가입 구현
  • OAuth2UserService 구현체 작성
  1. 어플리케이션 자체 회원 가입 구현
  • 인증을 위한 AuthenticationProvider 구현체 작성
  • 인증 후 인가를 위한 AuthenticationSuccessHandler 구현체 작성
  • principal에 원하는 세션 정보를 담기 위한 UserDetailsService 구현체 작성
  1. OAuth2, RESTful, SpringSecurity fromLogin 구현
  1. 인가를 위한 HandlerMethodArgumentResolver 구현
  1. Spring Session Data Redis
  • LettuceConnectionFactory 지정

여러가지 로그인 구현이 섞여 들어갈 경우 SpringSecurity 기본 구현체로 안되는 경우가 너무 많다.
특히 인증 구현체가 크게 OAuth2와 자체 세션 로그인으로 나눠지면 인증부터 인가까지 상당히 까다롭다
괜히 공통로직으로 가져가는 것 보다 별개의 인증 구현으로 인지하고 패키지 구조를 나눠 코드 관리를 잘 하는게 중요한듯
레디스는 한번 눈탱이 맞아봤지만 직렬화 칼같이 선긋는거 다루기 쉽지않다. json형태로 가져가는 것도 추후 도모해보자.

시작 전 생각했던 것

  • OAuth2, 자체 회원 체계 구축
  • OAuth2, RESTful, SpringSecurity fromLogin 구현
  • 그룹 구현
  • 회원 탈퇴 구현
  • 세션 클러스터 구현

이 티켓에서 실제로 한 것

  1. Spring Security 사용
  • SecurityFilterChain 구현체 작성
  1. OAuth2 회원가입 구현
  • OAuth2UserService 구현체 작성
  1. 어플리케이션 자체 회원 가입 구현
  • 인증을 위한 AuthenticationProvider 구현체 작성
  • 인증 후 인가를 위한 AuthenticationSuccessHandler 구현체 작성
  • principal에 원하는 세션 정보를 담기 위한 UserDetailsService 구현체 작성
  1. OAuth2, RESTful, SpringSecurity fromLogin 구현
  1. 인가를 위한 HandlerMethodArgumentResolver 구현
  1. Spring Session Data Redis
  • LettuceConnectionFactory 지정

여러가지 로그인 구현이 섞여 들어갈 경우 SpringSecurity 기본 구현체로 안되는 경우가 너무 많다.
특히 인증 구현체가 크게 OAuth2와 자체 세션 로그인으로 나눠지면 인증부터 인가까지 상당히 까다롭다
괜히 공통로직으로 가져가는 것 보다 별개의 인증 구현으로 인지하고 패키지 구조를 나눠 코드 관리를 잘 하는게 중요한듯
레디스는 한번 눈탱이 맞아봤지만 직렬화 칼같이 선긋는거 다루기 쉽지않다. json형태로 가져가는 것도 추후 도모해보자.