백/back-end

[보안] Security의 정의와 Security 프레임워크의 종류(Spring Security, Apache Shiro, OAuth/OAuth2, OpenID Connect 등)

연지양갱 2023. 10. 20. 09:29
728x90
반응형
SMALL

백엔드 개발자 라면 보안문제를 해결하기 위한 통신을 주로 개발하거나 유지보수 할 것입니다.

이번에는 Security에 대해 알아보도록 하겠습니다.

 

 

Security란?

Security란 보안이라는 영문 뜻을 가지고 있습니다.

이를 컴퓨터공학에 접목하면 프로젝트에서 사용자의 인증 처리 및 리소스의 접근 제어에 활용되는 기술입니다.

보안을 강화하기 위한 여러 프레임워크가 있습니다. 그 중 하나가 Spring Security라는 것이 있습니다.

 

 

 

Security 3가지 요소

  1. 기밀성(Confidentiality) : 정보가 인가된 사용자만이 접근할 수 있도록 하는 것입니다. 이는 암호화, 접근 제어 목록(ACL), 토큰 기반 인증 등 다양한 방법으로 달성될 수 있습니다.
  2. 무결성(Integrity) : 데이터가 원래의 상태에서 변경되지 않았음을 보장하는 것입니다. 이는 해시함수, 디지털 서명 등을 통해 데이터가 변경되었는 지 감지하고 필요한 경우 복구할 수 있습니다.
  3. 가용성(Availability) : 필요한 시스템과 정보에 항상 접근할 수 있도록 하는 것입니다. 이를 위해 하드웨어의 중복화, 로드 밸런싱, 재해 복구 계획 등이 필요합니다.

 

정보 보안은 네트워크 보안, 애플리케이션 보안, 엔드포인트 보안, 데이터 보안 등 여러 하위 분야로 나뉩니다.

각각의 분야는 고유한 도구와 전략들을 사용하여 위협에 대응합니다.

 

제가 해봤던 내용으로는 카카오톡이나 네이버 로그인 인증을 수행한 적이 있습니다.

이때 토큰을 생성하고 보낸 뒤 인증 되면 로그인 성공으로 사용자의 정보를 가지고 올 수 있었습니다.

이 이야기를 말하는 것 같아서 반가웠답니다..!

 

 

 

 

 

Security 프레임워크

  1. Spring Security : Java와 Spring 기반의 애플리케이션을 위한 보안 프레임워크로, 인증 및 인가, CSRF 공격 방지 등 다양한 보안 기능을 제공합니다.
  2. Apache Shiro : Java 애플리케이션을 위한 강력하고 쉽게 사용할 수 있는 보안 프레임워크로, 인증, 인가, 세션 관리 및 암호화 등의 기능을 제공합니다.
  3. OAuth/OAuth2 : 웹, 모바일 및 데스크톱 애플리케이션이 안전하게 API를 사용할 수 있도록 하는 개방형 표준입니다.
  4. OpenID Connect : OAuth 2.0을 기반으로 한 오픈 스탠다드로서 사용자 인증에 대한 여러가지 사항들을 정의하고 있습니다.
  5. JWT(JSON Web Tokens) : 요청자의 클레임(주장)을 JSON 객체로 안전하게 전달하기 위한 컴팩트하고 독립적인 방법입니다.
  6. Express.js Middleware such as Passport.js and Helmet.js : Node.js와 Express를 위한 미들웨어로서 다양한 보안 기능(인증 전략 설정, HTTP 헤더 설정 등)을 제공합니다.
  7. Django REST framework JWT or Django-allauth : Python Django를 위해 만들어진 라이브러리로서 간편하게 JWT나 소셜 로그인 같은 기능들을 구현할 수 있도록 도와줍니다.
  8. Devise (for Ruby on Rails) : Ruby on Rails에서 널리 사용되는 유연성과 확장성 있는 인증 솔루션입니다.

각 프레임워크는 장점과 단점이 있으므로 선택할 때는 개발 환경과 요구 사항에 따라 적절히 고려해야 합니다!

 

 

 

Security 프레임워크 별 장점과 단점

  장점 단점
Spring Security - 강력한 보안 기능 : 다양한 보안 기능을 제공
- 재사용성 : 모듈화된 구조를 가지고 있어 쉽게 재사용 가능
- 커뮤니티의 지원
- 초기 설정 복잡성 : 설정 옵션을 제공하여 초기 설정이 복잡함
- 학습 곡선 : 다양한 기능을 제대로 사용하기 위한 학습 필요(버전 별 차이점 확인 후 구현해야 함)
Apache Shiro - 직관적인 API : 최대한 API를 사용하기 쉽도록 설계됨
- 유연성 : 특정 환경이나 컨테이너에 종속되지 않음
- 웹 환경 지원 : 독립형 java 애플리케이션뿐만 아니라 웹환경도 지원함
- 지원 : 꾸준한 업데이트
- 문서화 부족 : 문서나 튜토리얼이 상대적 부족
- 커뮤니티 지원 부족 : Spring Security처럼 넓은 커뮤니티 지원이 없음
- 최신 인증 방식 내장 지원 부족
- 복잡성 처리 요구사항 : 처리하기 위해서는 Shiro의 내부 동작 방식을 잘 이해해야 함
OAuth/OAuth2 - 사용자 경험 개선 : SNS 계정으로 로그인할 수 있음
- 보안성 향상 : 정보 노출되지 않으며, 권한 부여 및 취소 용이
- API 접근 위임 :일부 접근 권한을 다른 애플리케이션에 안전하게 위임 가능
- 복잡성 
- 문서화와 지침 부재
- 세션 관리 문제 : 개별적으로 세션관리 해줘야함
- Phishing 공격 취약성 
- Access Token과 Refresh Token관리 필요성
OpenID Connect - 사용자 친화적 : 신뢰 가능한 계정에서 사용자가 직접 인증함
- 보안성 : 안전하게 인증 정보 전달
- 표준화 : 많은 주요 기업들이 프로토콜을 지원
- 복잡성 : 상호작용을 포함하기 때문에 복잡
- 인터넷 연결 필요성
- Phishing 공격 취약성
- 제 3파트 의존성 : 외부 OpenID Proider에서 처리됨
JWT(JSON Web Tokens)  - 상태 유지 없음 : 세션 저장소 필요 없음
- 분산된 시스템 유용 : 시스템에서 인증 정보를 공유하는 데 유용
- 모바일 애플리케이션에 적합 : 쿠키 사용의 제약이 있는 토큰 기반의 인증 방식
- 토큰 크기 : JWT는 많은 정보가 있어 크기 커질 수 있음
- 보안 문제 : 발급된 JWT는 만료 시간까지 유효하기 때문에 보안 문제 될 수 있음
- 재사용 불가능한 세션 관리 : 상태를 저장하지 않음
Express.js Middleware such as Passport.js and Helmet.js - 다양한 인증 전략 지원 
- 유연성과 모듈화: 독립적인 패키지로 제공되어 있음
- 간편한 HTTP 보안설정 제공 : 여러 HTTP 헤더를 설정하여 보안 강화
- 복잡성 : 초보 개발자에게 복잡함
- 보안 전략의 수 적음 : HTTP 헤더 설정은 보안 전략 중 일부이므로 다른 보안 함께 사용
Django REST framework JWT or Django-allauth - JWT인증 지원 : Django REST 프레임워크와 함꼐 사용함 
- 다양한 제 3자 인증 제공 : 소셜 로그인 지원
- Local과 Social계정 연동 지원
- 유지 보수 중단 : 이 패키지는 유지보수되고 있지 않음
- 복잡성 : 설정 옵셔의 다양성과 여러 기능 때문에 처음 접하는 개발자에게는 복잡
Devise (for Ruby on Rails) - 완전성 : 회원가입, 비밀번호 찾기 등 인증기능을 제공
- 모듈화 및 확장성 : 필요한 부분만 선택해서 사용 가능
- 학습 곡선 : 많은 기능과 설정 옵션을 가지고 있는 만큼 초기 학습 곡선이 존재

 

위 표는 그냥 어느 정도가 있는지 확인하는 것이 좋을것 같습니다 (너무 많은 정보를 적으니 확실하지 않네요...ㅎ)

현재 가장 많이 활성화 되어 있는 프레임워크는 Spring Security입니다.

커뮤니티가 활발하여 오류나 모르는 부분은 쉽게 찾을 수 있을 것이라고 생각합니다.

 

 

프레임워크를 하나만 사용하라는 것은 아닙니다. 각 프레임워크의 장단점이 있으니 프로젝트에 필요한 내용을 보안적 문제를 해결할 수 있는 프레임워크를 골라 두가지 이상 프레임워크를 사용할 수 있습니다.

 

 

실제상황과 요구사항에 따라 적절한 보안 프레임워크나 도구를 선택해야 합니다.

 

 

  1. Spring Security: Java와 Spring 기반의 애플리케이션에서 가장 널리 사용되는 보안 프레임워크입니다. 인증과 인가, CSRF 공격 방지 등 다양한 보안 기능을 제공합니다.
  2. OAuth 2.0 / OpenID Connect: 웹, 모바일 및 데스크톱 애플리케이션에서 안전하게 API를 사용할 수 있도록 하는 개방형 표준입니다.
  3. JWT (JSON Web Tokens): 클라이언트와 서버 간에 정보를 안전하게 전송하기 위한 개방형 표준입니다.
  4. Passport.js: Node.js 애플리케이션에서 많이 사용되는 인증 미들웨어로서 다양한 "전략"을 통해 로그인 인증을 처리합니다.
  5. Devise (for Ruby on Rails): Ruby on Rails 환경에서 많이 쓰이는 유연하고 확장 가능한 인증 솔루션입니다.

 

위와 같은 내용이 있으므로 진행중인 프로젝트에 맞춰서 프레임워크를 사용하는 것이 좋을 것 같습니다!

반응형