'AdvICE'의 첫번째 서비스인 "익명게시판"이 어느 정도 마무리되가고 있고, 두번째 서비스인 "코딩존 예약 시스템"을 구현하기 전에 'AdvICE'의 인증과 권한 부여 로직을 구현하기 시작했다.
웹 서비스의 보안을 고려할 때, 모든 것을 원하는 접근 수준까지 보호해야한다. 여러 데이터 또는 기능들이 서로 영향을 줄 수 있는 모든 누츨을 취약성으로 간주하고 해결해야한다.
- 인증과 권한 부여의 취약성
인증은 웹 서비스를 이용하려는 사용자를 식별하는 과정이다. 특정 사용자의 추가 접근을 허가하기 전에 먼저 사용자의 고유
아이디( 'AdvICE'에서는 사용자 이메일)을 확인해야한다. 사용자의 아이디를 확인하고 나면 권한 부여 프로세스를 시작한다.
이 과정에서 취약성이 있다는 것은 사용자가 악의를 가지고 다른 사란의 기능이나 데이터에 접근 할 수 있다는 의미다.
-인증 방식 선택
인증과 권한 부여의 취약성을 보안하기 위해 가장 기본적인 인증 방식 Http basic을 사용하지 않고 JWT(JSON Web Token)로 선택했다.
JWT (JSON Web Token)는 HTTP Basic 인증에 비해 훨씬 높은 보안 수준을 제공하는 웹 표준 (RFC 7519)에 따라 정의된 컴팩트하고 자가 포함된 방식의 토큰이다. HTTP Basic 인증은 사용자의 ID와 비밀번호를 Base64 인코딩하여 전송하는 방식으로, 이는 쉽게 디코딩될 수 있어 보안상의 위험이 있다.
반면, JWT는 정보를 JSON 객체에 담고 서버의 비밀 키로 서명하여, 토큰의 정보가 중간에 조작되지 않았는지 검증할 수 있으며, 정보의 무결성을 보장한다. 이 토큰은 발행 주체, 만료 시간, 사용자의 클레임을 포함하고, 서명은 HMAC 알고리즘 또는 RSA/ECDSA 같은 공개 키 암호 방식을 사용한다. 또한, JWT는 토큰 내에 인증 정보(권한 정보)를 포함하므로, 서버가 상태를 유지할 필요 없게 되어 인증 정보 저장을 위한 추가적인 데이터 베이스 구축 없이 더 큰 확장성과 유연성을 제공한다.
그리고 토큰을 전송하는 방식으로는 Bearer 토큰을 사용할 것이다. Bearer 토큰은 HTTP 인증 스키마의 일부로, 토큰을 소유하고 있는 클라이언트에게 접근 권한을 부여하는 방식이다다. 이 토큰을 소지한 사람은 별다른 인증 절차 없이도 해당 토큰이 허용하는 리소스에 접근할 수 있다.
-코드 구현
1. 서버의 비밀키를 이용하여, jwt 토큰 생성하는 함수
2. 유효한 토큰인지 확인하고, 토큰의 클레임(사용자의 고유 값) 반환하는 함수
3. 받은 토큰이 bearer 토큰인지 확인하고, request 헤더 부분의 토큰을 추출하는 함수
4. Context을 생성해서 Context안에 사용자 고유 값, 권한 정보, request의 본문 내용을 저장하고, 반환하는 함수(필터)
5. Spring Security를 사용하여 httpSecurity를 설정 하는 함수.
'Team project > 'AdvICE' 웹 서비스 프로젝트' 카테고리의 다른 글
[AdvICE] "코딩존 예약 및 괸리 시스템" 설계 (0) | 2024.07.21 |
---|---|
[AdvICE] 민감한 데이터의 노출 및 예외 처리 (0) | 2024.07.14 |
[AdvICE] 인증번호 테이블 무결성 유지 (0) | 2024.06.07 |
[AdvICE] "특정 게시글 페이지"의 API 로직 정리 (0) | 2024.05.30 |
[AdvICE] 롤백을 처리를 위한 Transactional 어노테이션 (0) | 2024.05.18 |