CS/네트워크 - Top-down Approach + @

백엔드 개발자가 알아야 할 기초 보안 - 인증, 인가, OAuth, OpenID Connect

조금씩 차근차근 2025. 3. 9. 19:58

1. 인증과 인가

인증 (Authentication)

  • 정의: 사용자가 주장하는 신원을 확인하는 절차이다.
  • 목적: 사용자로부터 제공된 정보를 바탕으로, 실제로 해당 사용자인지 검증한다.

인가 (Authorization)

  • 정의: 인증된 사용자가 특정 리소스에 접근할 권한이 있는지를 확인하는 절차이다.
  • 목적: 인증을 마친 사용자에게 적절한 접근 권한을 부여하여 시스템 자원의 보안을 유지한다.

2. 암호화 방식 및 특징

대칭 키 암호화

  • 원리: 암호화와 복호화에 동일한 키를 사용한다.
  • 장점: 연산 속도가 빠르며 대용량 데이터 암호화에 효율적이다.
  • 단점: 키의 분배와 관리가 취약하여, 키 노출 시 전체 보안에 심각한 영향을 미친다.

공개 키 암호화

  • 원리: 서로 상보적인 공개 키와 개인 키를 사용하여 암호화와 복호화를 수행한다.
  • 장점: 키 분배 문제를 효과적으로 해결할 수 있으며, 인증과 디지털 서명에도 활용된다.
  • 단점: 대칭 키에 비해 연산량이 많아 처리 속도가 느리다.
  • 용도: 보안 통신의 초기 키 교환, 인증 및 서명 과정에서 주로 사용된다.

3. XSS와 CSRF 공격 및 방어

XSS (Cross-Site Scripting)

  • 정의: 공격자가 웹 페이지에 악성 스크립트를 삽입하여 사용자 브라우저에서 실행되도록 유도하는 공격이다.
  • 위험성: 사용자 세션 탈취, 악성 코드 실행 등 다양한 보안 위협을 야기한다.
  • 방어 방법:
    • 사용자 입력값에 대한 철저한 검증과 인코딩을 수행한다.
    • 콘텐츠 보안 정책(Content Security Policy, CSP)을 적용하여 스크립트 실행을 제한한다.

CSRF (Cross-Site Request Forgery)

  • 정의: 인증된 사용자의 권한을 도용하여, 사용자가 의도하지 않은 요청을 실행하도록 만드는 공격이다.
  • 위험성: 사용자의 권한을 이용한 악의적 행위가 발생할 수 있다.
  • 방어 방법:
    • CSRF 토큰을 활용해 요청의 정당성을 확인한다.
    • Referer 헤더를 검증하여 요청 출처를 확인한다.
    • SameSite 쿠키 속성을 설정해 타 도메인에서의 쿠키 전송을 제한한다.

4. OAuth 및 OpenID Connect

OAuth 2.0

  • 개념: 외부 인가 서버를 통해 제한적인 접근 권한을 부여받기 위한 표준 프로토콜이다.
  • 주요 구성 요소:
    • Authorization Server: 인가를 담당하는 외부 서버이다. (예: 구글 인가 서버)
    • Resource Server: 사용자가 접근하려는 자원이 존재하는 서버이다. (예: 구글 사용자 정보 서버)
    • Resource Owner: 인가 정보를 보유한 최종 사용자이다.
    • Resource Client: OAuth를 활용하는 클라이언트, 주로 백엔드 애플리케이션 서버이다.
  • 동작 원리:
    • 클라이언트는 인가 서버에 접근 권한 요청을 전송한다.
    • 인가 서버는 사용자 인증 후, 리다이렉트 콜백을 통해 클라이언트에게 인가 코드를 전달한다.
    • 이 인가 코드를 바탕으로 클라이언트는 액세스 토큰을 발급받아 자원 서버에 요청을 전송한다.

OpenID Connect와의 차이

  • OAuth: 인가(Authorization)에 중점을 둔 프로토콜이다.
  • OpenID Connect: OAuth 2.0 위에 인증(Authentication) 기능을 추가한 표준이다.
    • 특징: sub라는 고유 식별자를 사용하여, 이메일 주소 변경과 무관하게 안정적인 사용자 식별을 가능하게 한다.
  • 활용: OpenID Connect를 적용하면, 인가뿐 아니라 사용자 인증까지 통합적으로 관리할 수 있다.