시큐리티

(1. 인가 코드 받기만 보세용)
- test 시 사용할 index.html(resources/static 에 넣어서 사용해주세요)
<a href = "/oauth2/authorization/kakao">Kakao Login</a> <a href = "/oauth2/authorization/google">Google Login</a> <a href = "/oauth2/authorization/naver">Naver Login</a>
로그인
1. 사용자가 서비스에게 서비스 접근 및 로그인 요청(소셜 로그인 버튼 클릭)
/oauth2/authorization/kakao
,/oauth2/authorization/google
,/oauth2/authorization/naver
로 요청
2. 서비스가 KAKAO PAYCO 인증 서비스(Authorization Server)에 사용자 대신 로그인 요청
3. Authorization Server가 사용자에게 로그인 페이지 제공
4. 사용자가 ID, PW를 입력하여 Authorization Server에 요청하여 유효성 확인
5. 유효성이 확인되면, Authorization Server에서 사용자에게 Authorization Code 발급
6. 사용자가 서비스에게 Redirect Callback URL로 발급받은 Authorization Code를 담아서 요청
7. 서비스가 사용자가 전달한 Authorization Code를 사용하여 Authorization Server에 인증 요청(AccessToken 발급 요청)
8. Authorization Server에서 해당 Authorization Code를 검증 후 인증(AccessToken 발급) & 서비스에서 발급된 AccessToken 저장
- 우리 코드의
CustomOAuth2UserService
보기
9. 서비스에서 사용자의 인증 완료 & 로그인 성공 처리
인증해야만 접근할 수 있는 페이지 접근하기
흐름
- /api/v1/user/jwt-test 을 예시로 듦
- /api/v1/user/jwt-test는 security config에서 인증이 완료되어야만 접근할 수 있도록 설정했습니다.
1. 로그인
- accessToken, refreshToken 발급 받음
- 클라이언트가 이를 가지고 있음
1) accessToken 만료 X
2. 클라이언트가 1에서 발급받은 accessToken을 가지고 /api/v1/user/jwt-test에 접근 요청
3. 우리 코드의
JwtAuthenticationProcessingFilter
의 doFilterInternel 실행4. 현재 요청은 refreshToken을 가지고 있지 않으므로
checkAccessTokenAndAuthentication()
실행- accessToken에서 email을 추출해 존재하는 사용자인지 확인하고, 존재하면 인증객체 만들어서 SecurityContext에 저장
5. ”jwt-test 요청 성공” 응답
2) accessToken 만료 시
- “jwt-test 요청 성공” 응답이 아닌 기본 페이지로 돌아간다
2. 클라이언트가 1에서 발급받은 refreshToken을 가지고 /api/v1/user/jwt-test에 접근 요청
3. 우리 코드의
JwtAuthenticationProcessingFilter
의 doFilterInternel 실행4. 현재 요청은 refreshToken을 가지고 있으므로
checkRefreshTokenAndReissueAccessToken()
실행- 받은 refreshToken가 redis에 있는지 확인(유효한 refreshToken인지 확인)
- 유효한 refreshToken이면 accessToken과 refreshToken을 재발급해 클라이언트에 보내주기
- refreshToken 재발급 후 redis의 해당 유저의 refreshToken 갱신
5. 4에서 재발급 받은 accessToken으로 다시 접근
5. ”jwt-test 요청 성공” 응답
적용
- 요청 시 Authentication 헤더에 “Bearer 로그인 시 발급 받은 accessToken” 넣고 요청하기
- Authentication: Bearer dkfkslekflkalkflk
- accessToken 만료되면 Authentication-refresh 헤더에 “Bearer: refreshToken” 넣어주고 다시 같은 주소로 요청하기
- 현재는 accessToken이 만료되면 기본 페이지로 넘어갑니다(에러 처리할 예정)
- Authentication-refresh: Bearer dkfkslekflkalkflk
로그인한 사용자 정보 가져오기
@Controller public class SecurityController { @GetMapping("/username") @ResponseBody public String currentUserName(@AuthenticationPrincipal User user) { } }
시큐리티

(1. 인가 코드 받기만 보세용)
- test 시 사용할 index.html(resources/static 에 넣어서 사용해주세요)
<a href = "/oauth2/authorization/kakao">Kakao Login</a> <a href = "/oauth2/authorization/google">Google Login</a> <a href = "/oauth2/authorization/naver">Naver Login</a>
로그인
1. 사용자가 서비스에게 서비스 접근 및 로그인 요청(소셜 로그인 버튼 클릭)
/oauth2/authorization/kakao
,/oauth2/authorization/google
,/oauth2/authorization/naver
로 요청
2. 서비스가 KAKAO PAYCO 인증 서비스(Authorization Server)에 사용자 대신 로그인 요청
3. Authorization Server가 사용자에게 로그인 페이지 제공
4. 사용자가 ID, PW를 입력하여 Authorization Server에 요청하여 유효성 확인
5. 유효성이 확인되면, Authorization Server에서 사용자에게 Authorization Code 발급
6. 사용자가 서비스에게 Redirect Callback URL로 발급받은 Authorization Code를 담아서 요청
7. 서비스가 사용자가 전달한 Authorization Code를 사용하여 Authorization Server에 인증 요청(AccessToken 발급 요청)
8. Authorization Server에서 해당 Authorization Code를 검증 후 인증(AccessToken 발급) & 서비스에서 발급된 AccessToken 저장
- 우리 코드의
CustomOAuth2UserService
보기
9. 서비스에서 사용자의 인증 완료 & 로그인 성공 처리
인증해야만 접근할 수 있는 페이지 접근하기
흐름
- /api/v1/user/jwt-test 을 예시로 듦
- /api/v1/user/jwt-test는 security config에서 인증이 완료되어야만 접근할 수 있도록 설정했습니다.
1. 로그인
- accessToken, refreshToken 발급 받음
- 클라이언트가 이를 가지고 있음
1) accessToken 만료 X
2. 클라이언트가 1에서 발급받은 accessToken을 가지고 /api/v1/user/jwt-test에 접근 요청
3. 우리 코드의
JwtAuthenticationProcessingFilter
의 doFilterInternel 실행4. 현재 요청은 refreshToken을 가지고 있지 않으므로
checkAccessTokenAndAuthentication()
실행- accessToken에서 email을 추출해 존재하는 사용자인지 확인하고, 존재하면 인증객체 만들어서 SecurityContext에 저장
5. ”jwt-test 요청 성공” 응답
2) accessToken 만료 시
- “jwt-test 요청 성공” 응답이 아닌 기본 페이지로 돌아간다
2. 클라이언트가 1에서 발급받은 refreshToken을 가지고 /api/v1/user/jwt-test에 접근 요청
3. 우리 코드의
JwtAuthenticationProcessingFilter
의 doFilterInternel 실행4. 현재 요청은 refreshToken을 가지고 있으므로
checkRefreshTokenAndReissueAccessToken()
실행- 받은 refreshToken가 redis에 있는지 확인(유효한 refreshToken인지 확인)
- 유효한 refreshToken이면 accessToken과 refreshToken을 재발급해 클라이언트에 보내주기
- refreshToken 재발급 후 redis의 해당 유저의 refreshToken 갱신
5. 4에서 재발급 받은 accessToken으로 다시 접근
5. ”jwt-test 요청 성공” 응답
적용
- 요청 시 Authentication 헤더에 “Bearer 로그인 시 발급 받은 accessToken” 넣고 요청하기
- Authentication: Bearer dkfkslekflkalkflk
- accessToken 만료되면 Authentication-refresh 헤더에 “Bearer: refreshToken” 넣어주고 다시 같은 주소로 요청하기
- 현재는 accessToken이 만료되면 기본 페이지로 넘어갑니다(에러 처리할 예정)
- Authentication-refresh: Bearer dkfkslekflkalkflk
로그인한 사용자 정보 가져오기
@Controller public class SecurityController { @GetMapping("/username") @ResponseBody public String currentUserName(@AuthenticationPrincipal User user) { } }
웹소켓
- 웹소켓 테스트
- url: ws://localhost:8080/chat
- stomp 체크
- connect
- STOMP subscribe destination: /sub/(채팅방 이름)
- subscribe
- STOMP send destination: /pub/hello : 인삿말 보내기 /pub/image: 이미지 보내기
- Message content:
- /pub/hello
- request: {”email”:”이메일”,”channelId”:”채팅방이름”}
- response: {”email”:”이메일”,”nickname”:”별명”,”message”:”메시지”}
- /pub/image
- request: {”channelId”:”채팅방이름”,”image”:”이미지url”,”email”:”이메일”}
- response: {”email”:”이메일”,”image”:”이미지”}