Backend/JWT

· Backend/JWT
AccesToken 만료시간이 지났을 때 Access token이 만료되었을 때는 재발급을 위해 Refresh Token이 이용된다. 이때 클라이언트에서 재발급을 위한 요청을 보내는데, 두 가지 구현 방법이 있다. 인가가 필요한 요청에 대해 access token이 만료되었을 경우 401 응답을 보내고, 응답을 받은 클라이언트는 refresh 요청을 보내 새로운 access token을 발급 받은 뒤 재요청을 보낸다. 클라이언트가 요청을 보내기 전, access token의 payload를 통해 만료 기한을 얻고 만료 기한이 지난 토큰이라면 refresh 요청을 보낸 후에 새로운 access token을 발급받아 원래 하려던 요청을 한다. 서버에서 매번 요청마다 토큰 유효성 검사를 하는데, 어차피 만료되..
· Backend/JWT
고민 과정 상황 Access Token과 Refresh Token 발급하고 클라이언트에 어디에 담아 응답을 줄지 고민을 했다. 마찬가지로 클라이언트가 서버에 요청을 보낼때는 어디에 Access Token을 담아야 서버가 사용자 인증(JWT 검증)을 할 수 있을까? 의문 response body, 쿠키, 헤더에 담는 방법이 있느데 과연 어디에 담아 서버가 클라이언트에 응답(토큰 발급) / 클라이언트가 서버에 요청(사용자 인증)을 보내는게 맞는걸까? 결론 처음에 XSS보안을 고려해 클라이언트가 쿠키에 저장할 수 있도록 Access token과 Refresh token을 쿠키에 넣어 클라이언트에 보냈다. (set-cookie로 요청 헤더에 담음) -> 클라이언트가 토큰을 쿠키에 저장한다고 서버에서도 쿠키에 저..
· Backend/JWT
목표 기능 회원가입 (깃허브 참고) 로그인 Access Token, Refresh Token 발급 Authorization Header 에 Access Token, Refresh Token 담아서 응답 보내기 서버에서 Access Token과 Refresh Token을 어디에 담아서 클라이언트에 응답을 줘야할지 고민했다. [JWT] JWT는 어디에 저장할까 [JWT] JWT는 어디에 저장할까 고민 과정 상황 처음에 XSS보안을 고려해 클라이언트가 쿠키에 저장할 수 있도록 Access token과 Refresh token을 쿠키에 넣어 클라이언트에 보냈다. (set-cookie로 요청 헤더에 담음) 의문 다른 블로그를 hohodu.tistory.com Redis 부분은 추후에 포스팅할 예정이다. 개발 환경..
· Backend/JWT
개발 환경 spring boot 3.0.2 spring security : 6.0.1 Gradle Spring Security를 통한 JWT 적용 JWT를 사용하기 위해 구현해야 할 것은 기본적으로 TokenProvider, TokenAuthenticationFilter이다. JWT 토큰 제공을 위한 TokenProvider HTTP Request에서 토큰을 읽어 들여 정상 토큰이면 Security Context에 저장하는 TokenAuthenticationFilter 그리고 Spring Security에 적용하기 위해 구현해야 할 것은 기본적으로 아래와 같다. 기본적으로 Spring Security 설정을 위한 SecurityConfig TokenProvider @RequiredArgsConstruct..
· Backend/JWT
목표 : JWT 인증/인가 과정을 구현 그 전에 Spring Security를 알아보자 들어가기 전에 Spring Security 스프링 시큐리티는 스프링 기반의 애플리케이션 보안(인증, 인가, 권한)을 담당하는 스프링 하위 프레임워크이다. 스프링 시큐리티는 이러한 필터들을 또 다시 하나로 묶어 하나의 인증 영역을 만들고 이를 SecurityFilterChain 객체로 관리한다. (기존에는 하나의 SecurityFilterChain을 구성하기 위해서 WebSecurityConfigurerAdapter를 상속한 클래스에서 config 메소드를 오버라이딩한다. 하지만 스프링 시큐리티 5.7.0 버전부터 WebSecurityConfigurerAdapter를 사용하지 않는다고 되어있다.) Spring Secur..
· Backend/JWT
들어가기 전에 인증과 인가 인증은 사용자의 신원을 입증하는 과정이다. 예를 들어 회사에 지문이나 신분증으로 회사 사람인 것을 입증하는 것이다. 인가는 사이트의 특정 부분에 접근할 수 있는지 권한을 확인하는 작업이다. 예를 들어 내가 회사원이라고 해도 모든 곳에 접근 가능한 것은 아니다. 보안 담당자만이 접근할 수 있는 사무실은 들어가지 못한다. 일반 사원, 보안 담당자등 권한에 따라 접근할 수 있는지가 다르다. JWT는 왜 필요할까? 인증/인가 방식 중에 하나이다. stateless하므로 서버가 상태를 보관하고 있지 않은 특징이 있다. 서버는 한번 발급한 토큰에 대해서 제어권을 가지고 있지 않다. 그런데 JWT는 외부에 노출되는 경우 치명적인 보안 이슈가 발생할 수 있다. 서버는 탈취한 것을 알지 못한채..
호_두씨
'Backend/JWT' 카테고리의 글 목록