Security 에서 JWT를 사용한 인증/인가 흐름
- 사용자 회원가입
-> 해당 URI 요청은 permitAll
(무조건 접근 허용) 처리
-> 사용자 입력값으로 service에서 회원가입 진행
- 사용자 정보 저장 시 비밀번호 암호화
->PasswordEncoder 사용
- 로그인
-> 해당 URI 요청 permitAll
처리
-> 사용자 입력값으로 service에서 회원 인증 진행 (비밀번호 일치 여부 등)
- 인증 성공 -> 정보 사용해 JWT 토큰 생성 후 Header에 추가하여 반환
-> Client는 쿠키 저장소에 저장
- 게시글 작성과 같은 요청 진행시 JWT 토큰 같이 보낸다.
- 서버는 JWT 토큰 검증
- 토큰 정보 사용해 사용자 인증 진행해주는 Spring Security에 등록한 CustomSecurityFilter를 사용해 인증 / 인가 처리
- CustomSecurityFilter에서 SecurityContextHolder에 인증 완료한 사용자 상세 정보 저장
-> 이를 통해 Spring Security에 인증이 완료 되었다는 것을 알려줌
즉, JWT 토큰과 CustomSecurityFilter를 통해 사용자를 로그인 된 상태로 유지 시켜준다.
패스에 보안을 적용하기 위한 메소드
메소드 | 동작 |
---|
access(String) | 주어진 SpEL 표현식의 평가 결과가 true이면 접근을 허용 |
anonymous() | 익명의 사용자의 접근을 허용 |
authenticated() | 인증된 사용자의 접근을 허용 |
denyAll() | 무조건 접근을 허용하지 않음 |
fullyAuthenticated() | 사용자가 완전히 인증되면 접근을 허용(기억되지 않음) |
hasAnyAuthority(String...) | 사용자가 주어진 권한 중 어떤 것이라도 있다면 접근을 허용 |
hasAnyRole(String...) | 사용자가 주어진 역할 중 어떤 것이라도 있다면 접근을 허용 |
hasAuthority(String) | 사용자가 주어진 권한이 있다면 접근을 허용 |
hasIpAddress(String) | 주어진 IP로부터 요청이 왔다면 접근을 허용 |
hasRole(String) | 사용자가 주어진 역할이 있다면 접근을 허용 |
not() | 다른 접근 방식의 효과를 무효화 |
permitAll() | 무조건 접근을 허용 |
rememberMe() | 기억하기를 통해 인증된 사용자의 접근을 허용 |
OAuth (Open Standard for Authorization)
- 웹사이트 및 애플리케이션에 비밀번호를 제공하지 않고 접근 권한을 부여 받을 수 있게 해주는 공통적 수단으로서 사용 되어지는 기술
kakao Login
google Login
naver Login
apple Login