[내일배움캠프] 인증과 인가 개념 및 보안 흐름
1. 인증(Authentication)과 인가(Authorization)
- 인증(Authentication): 사용자가 누구인지 확인하는 절차
- 인증 = 신원확인 (로그인)
- 스마트포 잠금을 지문이나 얼굴 인식으로 해제하는 것
- 건물 출입구에서 신분증을 제시하여 신원 확인받는 것
- 인가(Authorization): 인증된 사용자가 특정 리소스나 기능에 접근할 수 있는 권한이 있는지 확인하는 절차
- 인가 = 권한 부여 (접근 제어)
- 유료 구독자만 프리미엄 컨텐츠를 볼 수 있는 것
- 건물에 출입은 했지만, 특정 사무실에는 들어갈 수 없는 것
2. 세션(Session)과 JWT
- 세션(Session): 서버가 사용자의 로그인 상태를 기억하는 방식.
- 동작 흐름: 사용자 로그인 > 세션 정보 생성 및 저장 > 세션 ID 전송 > 요청과 검증
- 장점: 서버에서 모든 세션정보를 관리하여 보안에 유리, 제어가 쉬움, 클라이언트에 민감한 정보가 남지 않음
- 단점: 사용자가 많아질수록 서버의 메모리나 DB 부하가 커짐, 확장성 문제
- JWT(Json Web Token): 서버가 로그인 상태를 저장하지 않는(stateless) 인증 방식
- 동작 흐름: 사용자 로그인 > 토큰 생성 및 전송 > 토큰 저장 > 요청과 검증
- 장점: 서버가 토큰을 저장하지 않아 부하가 줄고 확장에 용이, 다양한 클라이언트 환경에 사용하기 편리
- 단점: 토큰이 탈취되면 악용될 수 있음, 토큰의 크기가 세션 ID보다 큼
3. 웹 애플리케이션 보안 흐름
- 세션이든 JWT이든 큰 틀에서 보안 흐름 인증 > 인가 > 응답으로 같다.
인증
- 로그인
- 서비스에 접속하여 아이디와 비밀번호를 입력하고 로그인 버튼을 클릭합니다.
- 처리
- 입력된 아이디와 비밀번호가 회원 정보와 일치하는지 확인
- 신원을 확인
- 출입증(Session key or JWT)을 발급
- 결과
- 로그인 성공
인가
- 행동
1.'마이페이지'를 클릭
- 서비스의 처리:
- '마이페이지'는 개인 정보가 담긴 페이지
- 서버는 출입증을 보고, '마이페이지'에 접근하는 사람의 신원 확인
- 다른 사람의 마이페이지에 접근하려고 했다면 이 단계에서 접근 차단
- 결과
- 서버는 자신의 정보를 요청한 것이므로 페이지를 볼 권한이 있다고 판단
응답
- 대기
- 페이지 로딩 대기
- 처리:
- DB에서 개인정보를 가져옴
- 클라이언트에 전송
- 결과
1.'마이페이지' 열림
4. 마무리
- 인증과 인가의 차이점에 대해서 명확히 알고 설명할 수 있게 되었다.
- 세션과 JWT에 대해서 알고 서로의 장단점과 보안 흐름에 대해서 알 수 있었다.
- 최근 JWT 방식을 많이 사용한다고 하는데 보안에 있어 취약한 점이 있는것이 요즘 개인정보 유출에도 이러한 연관점이 있는지에 대해서 궁금해졌고 알아보면 좋을것 같다는 생각이 들었다.