강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

정유진님의 프로필 이미지
정유진

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

로그인 처리하기 - 서블릿 HTTP 세션2

세션 방식의 인증 과정에 궁금한점 있습니다.

작성

·

56

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
안녕하세요 강의를 듣고 프로젝트 진행 도중 궁금한게 생겨 질문드립니다!

현재 강사님이 알려주신대로 유저가 로그인에 성공하면 user 세션을 만들고 세션 아이디를 쿠키로 전달 하고 있습니다.

이후 요청이 올때마다 인터셉터에서 세션이 있는지 user라는 세션이 있는지 확인 후 컨트롤러에 접근하도록 구현했습니다.

여기서 궁금한 점이

만약 유저A가 로그인에 성공한 후에

수정이나 생성 또는 그 외의 과정을

유저B의 아이디로 url 또는 요청 body에 담아 요청을 보내도 인터셉터에선 인증된 것으로 간주 되어 유저A가 유저B를 탈퇴시키는 등의 과정도 가능할거라는 생각이 들었습니다.

이에 대한 해결 방안으로 user 세션의 아이디 값과 요청으로 들어온 아이디 값이 일치하는지 확인하는 로직을 필요한 모든 컨트롤러에 추가하는 것이 일반적일까요?

아니라면 실무에서는 주로 어떻게 처리하는지 궁금합니다.

답변 2

0

안녕하세요. 정유진님, 공식 서포터즈 y2gcoder입니다.

AI 인턴의 답변에 추가로 말씀드리고 싶습니다!

그래서 그런지 기본적으로 관리자가 아닌 사용자 단 API 에서 사용자에 대한 정보를 변경하거나 하는 작업은 식별자를 명시적으로 요청에 받지 않습니다. 대신 서버 내부에서 인증 정보를 통해 유저 정보를 가져온 후 수정하는 식으로 개발하는 것 같습니다.

추가적으로 그 외에 도메인에 대한 수정(쓰기) 권한이 있는지 체크하는 것은 인터셉터나 경웨 따라 애플리케이션 로직에 포함하기도 합니다. ex) 게시글의 작성자만 게시글을 수정하거나 삭제할 수 있을 때

감사합니다.

정유진님의 프로필 이미지
정유진
질문자

감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다. 정유진님.

유저 인증과 권한 체크 관련 고민에 대해 질문을 주셨군요. 스프링에서 세션을 활용한 인증은 기본적인 사용자 확인 과정에 사용됩니다. 질문하신 사항은 실제 ‘인증’과 ‘인가(authorization)‘의 차이에 대한 것입니다. 인증(auth) 과정에서는 사용자가 누구인지 확인하고, 인가 과정에서는 사용자가 특정 동작을 수행할 수 있는 권한이 있는지를 판단합니다.

1. 인증 과정과 인가 과정의 차이는 무엇인가요?

  • 인증(Authentication): 사용자가 누구인지 확인하는 과정입니다. 로그인 여부를 체크하고, 유효한 세션이 있는지를 확인하는 것이 여기에 해당합니다.

  • 인가(Authorization): 사용자가 특정 리소스나 기능에 접근할 수 있는 권한이 있는지를 결정하는 단계입니다. 이 부분이 질문하신 문제에 직접적으로 관련됩니다.

2. 중요한 인가 처리 방법

당신이 염려하는 시나리오에서, 유저A가 유저B로 로그인된 것처럼 행동할 수 있다는 것인데, 이를 방지하기 위해 인가는 필수적입니다.

  • 세션을 통한 인가 구현: request에 포함된 사용자 정보와 세션에서 저장된 사용자 정보와 일치하는지를 확인해야 합니다. 이 방법은 수동이지만, 특정 기능이나 리소스 접근 시 직접적으로 확인하는 용도로 유용합니다.

  • Spring Security 활용: 대부분의 실제 프로젝트에서는 동작의 복잡성과 보안 필요한 세부 사항에 맞춰 Spring Security를 사용하여 권한을 관리합니다. Spring Security에서는 유저의 역할(Role)을 기반으로 쉽게 접근 권한 관리가 가능합니다.

기존 답변 중 유사한 주제를 다루고 있는 답변을 참조하시기 바랍니다:

  • “로그인 세션 질문”에서는 로그인한 사용자가 불필요한 접근을 방지하는 체크 방식으로 인터셉터 및 컨트롤러에서의 검사에 관한 논의가 있습니다. 이는 유사한 문제에 대한 실전적 대응을 설명합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

정유진님의 프로필 이미지
정유진

작성한 질문수

질문하기