시큐리티 상식(feat.oauth, jwt)

장서연·2022년 5월 23일
0

스프링 시큐리티

목록 보기
6/9
post-thumbnail
  • 스프링 시큐리티의 핵심은 "Cumstomizing" 이다.

  • 인증과 인가의 차이

    - 인증: 접근자가 누구인지 확인하는 절차
    - 인가: 인증된 접근자에게 권한을 허락하는 절차

  • 스프링 시큐리티를 설정하기 전에는 사용자 -> 컨트롤러로 요청이 넘어가지만, 스프링 시큐리티를 설정하게 되면 여러 인증,인가 필터들이 추가된다.

  • jwt 토큰을 사용하려면 httpBasic 과 formLogin 을 disable 해야 한다. 두 개는 ID-PW 를 이용하는 방법인데, 이걸 커스터마이징 하기 위해서임.

  • JwtAuthenticationFilter 를 UsernamePasswordAuthentication.class 필터 전에 필터체인을 탈 수 있게 addFilterBefore 를 하고, 예외 처리를 위한 JwtExceptionFilter 를 위에 등록한 JwtAuthenticationFilter 전에 등록하자

  • 어떤 oauth2 로그인이든, 사용자의 oauth2 게정정보(생일, 닉네임, 이메일 등) 을 가져오려면 Application 과 kakao server 간의 3번의 요청이 필요하다

    '인증 코드 요청', '인증 코드로 토큰 요청', '토큰으로 api 호출'

여기서 인증 코드 요청은 실제 사용자가 카카오톡 로그인을 하면 1회성 인증 코드를 준다. 
이 1회성 인증 코드를 통해 다시 카카오 서버에 인증 코드로 토큰을 요청해야 한다. 
그러면 토큰이 발급되는데, 이걸 이용해서 다시한번 사용자 정보를 얻어와야 한다. 

이렇게 총 3번의 요청이 이루어지는 것이다.
  • 스프링 시큐리티의 경우, oauth2 로그인을 자체에서 지원한다. 그래서 '인증 코드 요청', '인증 코드로 토큰 요청' 이 스킵되고, 사용자가 로그인하는 순간 바로 사용자 정보가 응답으로 온다.

  • 스프링 시큐리티의 oauth2 를 사용하면 3번의 요청을 1번으로 줄여주긴 하지만 오히려 헷갈릴 수도 있음...

  • 구글 로그인을 다 하고 나면 마지막에 우리 서버에서 access token 과 refresh token 을 발급하면 된다.

0개의 댓글