작성
·
258
1
답변 1
0
첫번째, 두번째 질문에 답변입니다.
JWT를 사용하는 이유는 세션을 사용하지 않기 위해서죠? 즉 인증을 할 때 하나의 서버에 종속되지 않기 위해서에요. 서버가 여러대가 되면 서버 마다 세션을 가지고 있기 때문에 JWT로 토큰 검증을 통해 인증을 합니다.
JWT로 토큰 검증을 하여 인증을 하게 되면, 토큰 내부에 개인 primary key가 있기 때문에 그것을 유저를 구분하고 권한처리가 가능하나, 단점이 있습니다.
/user, /board 등 특정 주소로 요청이 올 때 그 주소에 대한 권한이 있는지를 매번 JWTAuthorization에서 체크해야 한다는 것입니다. 이게 생각보다 엄청 귀찮아요.
그래서 그냥 세션에 집어 넣어버리면, 시큐리티가 특정 주소마다 권한 처리를 해줄것이기 때문에 그냥 시큐리티에게 맡겨버리는 겁니다. 그럼 편하자나요 ㅎ 안써도 되요. 대신 안쓰면 직접 주소마다 권한 처리를 해줘야 해요.
아니면 스프링 인터셉터를 써야해요.
권한 요청이 있을 때마다 세션에 저장하는 이유도 그 시점에만 잠시 세션에 임시로 저장해두고 그걸 통해 시큐리티로 권한처리를 하고, 요청이 올 때마다 서버가 4대라면 어느 서버로 갈지 모르기 때문에 특정 서버에 종속시키지 않기 위해서에요. 이해가 가시나요?
아 서버가 여러대면 해당 토큰유저에대한 세션정보가 안남아있는 서버에 접근할수도 있으니 그때그때 생성하는것이군요. 세션을 쓰는 이유와 왜 그때그때 세션에 저장하는지는 알겠습니다
그렇다면 이미 토큰에 맞는 권한을 세션에 저장한 서버에 접근해서 권한처리를 할때는 시큐리티세션홀더.set세션 부분에서 내부와 principalDetail과 비교해서 존재하면 따로 저장을 안하게되는것인가요?