ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 정리된 인증 과정
    개발/etc 2024. 4. 16. 16:42

    별도의 인증 서버는 두지 않는다

    프론트엔드를 Next.js로만 구현하려고 했고 이는 키클록 인가 서버 혹은 스프링으로 인가 서버를 두게 되면 페이지를 Next.js로 개발하는 것에 한계가 있다. 키클록 인가 서버는 자체 페이지를 쓰거나 프리마커로 커스텀 하는 방식을 써야 하며, 스프링 인가 서버는 프레임워크에서 로그인 페이지를 렌더링해야 한다. 타임리프를 쓰면 되긴 하지만 이번 프로젝트에서는 직접 토큰을 다뤄보는 연습을 해보자.

    리소스 서버에서 토큰을 발행한다

    • JJWT 라이브러리를 사용해서 토큰을 발행하고 클레임을 추출한다
    • 토큰 정책
      • 액세스 토큰의 만료 기간을 짧게 가져가고 리프레시 토큰의 만료 기간을 길게 가져가는 방식
        • 액세스 토큰이 유출됐을 때의 대안인데 리프레시 토큰이 유출되면 관리자가 무효화 하는 것 말고는 빠른 대처가 어려울 것 같다
      • 리프레시 토큰으로 액세스 토큰을 새로 발급받을 때 리프레시 토큰도 재발급 -> 이 방법으로 확정
        • 기존 리프레시 토큰을 만료
          • 만료된 리프레시 토큰을 가졌으면 로그인을 다시 하도록 한다
        • DB에 유지
          • 일단은 로그아웃과 함께 전부 삭제하는 걸로 한다
          • 히스토리를 위해 쌓아 두고 나서 일정 주기마다 삭제하는 방식도 가능은 하다

    쿠키에 저장한다

    • CSRF 공격은 쿠키 SameSite 정책 중 Lax부터 막을 수 있다
      • SameSite 정책을 명시하지 않았을 경우 SSO 매커니즘이 손상되는 것을 방지하기 위해 최상위 레벨 POST 요청에 대해 처음 120초 동안은 Lax 제한을 적용하지 않는다는 말이 있네(출처)
      • 명시적으로 Lax를 설정하도록 하자
    • XSS 공격으로 쿠키 정보의 유출을 막기 위해 HttpOnly와 Secure을 설정한다
      • HttpOnly를 설정하면 쿠키에 접근 자체가 안 되니까

    댓글

Designed by Tistory.