RECT 응용 프로그램에서 턴 서버 자격 증명 관리는 클라이언트 측에 전송 된 자격 증명이 노출 될 수 있기 때문에 근본적으로 어려운 일입니다. 그러나 이러한 자격 증명을 안전하게 관리하고 위험을 최소화하며 액세스를 제어하기위한 모범 사례와 건축 적 접근 방식이 있습니다. 아래는 React 환경에서 턴 서버 자격 증명을 안전하게 관리하는 것에 대한 심층적 인 설명입니다.
턴 자격 증명으로 보안 문제를 이해합니다
NAT 또는 방화벽 제한으로 인해 직접 피어 투 피어 연결이 실패 할 때 데이터를 전환하여 WERBRTC 응용 프로그램을 지원합니다. 턴 서버는 무단 사용 및 남용을 방지하기 위해 일반적으로 사용자 이름과 암호로 인증이 필요합니다.
클라이언트 측 React 응용 프로그램에서는 WERBRTC 연결 설정에 Turn Server 자격 증명 (사용자 이름 및 비밀번호)이 포함되어야합니다. React는 브라우저에서 실행되므로 클라이언트 코드에 포함되거나 클라이언트가 가져온 모든 자격 증명이 본질적으로 노출됩니다. JavaScript 코드 및 네트워크 트래픽은 브라우저 개발자 도구를 통해 사용자 또는 공격자가 검사 할 수 있으므로 정적 턴 자격 증명을 완전히 숨길 수 없습니다.
최선의 접근 방식 : 동적, 단기 턴 자격 증명
권장되는 모범 사례는 React 앱에서 하드 코딩 턴 자격 증명을 피하는 것입니다. 대신 백엔드 서버에서 동적 자격 증명 생성 메커니즘을 사용하십시오. 이 백엔드는 다음과 같습니다.
- 장기 공유 비밀 또는 마스터 자격 증명을 단단히 유지하여 고객이 접근 할 수 없습니다.
- 요청시 동적으로 단기간의 고유 한 턴 자격 증명을 반응 앱에 제공하십시오.
이러한 임시 자격 증명은 수명이 제한되어있어 자격 증명 누출의 영향을 줄입니다. 백엔드는 자격 증명을 발급하기 전에 사용자 신원 및 권한을 검증 할 수 있습니다.
동적 턴 자격 증명을 구현하는 방법
1. REST API 지원이있는 턴 서버 설정 **
`Coturn '과 같은 많은 턴 서버 구현은 REST API를 지원하여 턴 서버와 공유되는 장기 비밀을 기반으로 임시 턴 자격 증명을 생성합니다.
- 백엔드는 턴 액세스를위한 사용자 이름 및 비밀번호에 서명하여 만료를위한 타임 스탬프를 포함시킵니다.
-이 API는 단기간 후에 만료되는 동적 턴 자격 증명을 안전하게 생성합니다.
2. 턴 자격 증명을 제공하기위한 백엔드 엔드 포인트 **
RECT 응용 프로그램이 호출 할 수있는 서버에서 인증 된 REST 엔드 포인트를 만듭니다. 이 엔드 포인트 :
- 사용자 또는 클라이언트를 인증합니다.
- 턴 서버 공유 비밀을 사용하여 임시 사용자 이름과 비밀번호를 생성합니다.
- 이러한 단기 자격 증명을 React 앱으로 반환합니다.
3. React App은 요구 사항에 대한 자격 증명을 가져옵니다 **
React 앱에서 :
-EBRTC 연결을 시작하기 전에 백엔드에서 자격 증명을 요청하십시오.
- 제공된 자격 증명을 사용하여 WebRTC 피어 연결을 구성하십시오.
- 자격 증명이 일시적이므로 유출 된 자격 증명은 만료 후 쓸모가 없습니다.
4. 자격 증명 만료 및 남용 방지 **
- 자격 증명에 대한 짧은 만료 시간 (예 : 10-15 분).
- 사용을 모니터링하고 남용 또는 무단 시도를 감지합니다.
- 남용이 감지되면 사용자의 권한을 취소하고 추가 자격 증명 발급을 차단하십시오.
하드 코드 턴 자격 증명이 아닌 이유는 무엇입니까?
- React 코드 또는 환경 변수의 하드 코딩 된 자격 증명 클라이언트에 번들로 제공됩니다. 개발자 도구를 통해 액세스 할 수 있습니다.
- 공격자는 무단 릴레이, 잠재적으로 발생하는 비용 및 대역폭 문제에 노출 된 턴 서버를 사용할 수 있습니다.
- 클라이언트가 턴 서버를 사용하기 위해 자격 증명을 알아야하기 때문에 프론트 엔드 난독 화 또는 숨겨진 기술은 실제로 안전하지 않습니다.
추가 보안 계층
위의 동적 자격 증명 접근 방식은 핵심 보안 패턴이지만 이러한 관행으로 접근 방식을 강화합니다.
- 모든 REACT APP 및 API 통신에 HTTPS를 사용하여 자격 증명 차단을 방지합니다.
- 액세스를 제어하기 위해 턴 자격 증명을 발행하기 전에 사용자를 인증합니다.
- 사용자 인증을 위해 JWT 토큰 또는 OAUTH를 사용한 다음 백엔드에서 액세스 제어와 결합하십시오.
- 학대를 제한하기 위해 백엔드에서 요금 제한 및 사용 할당량을 구현합니다.
- 로깅 및 모니터링을 사용하여 의심스러운 활동을 감지하십시오.
- 백엔드에서 주기적으로 장기 회전 서버 비밀을 회전시킵니다.
React의 자격 증명을 저장 및 처리합니다
반응 앱이 백엔드에서 임시 턴 자격 증명을 받으면 다음과 같습니다.
- 지속성을 피하기 위해 메모리 (상태 변수 또는 컨텍스트)에만 저장하십시오.
- 현지 스토리지, 세션 예방 또는 쿠키에 보관하지 마십시오.
- React State 또는 Context Management를 사용하여 필요한 경우에만 자격 증명에 액세스 할 수 있습니다.
- 세션 만료 또는 연결 후 더 이상 필요하지 않은 경우 메모리에서 자격 증명을 지우십시오.
보안 턴 자격 증명 관리 워크 플로우 요약
1. 사용자는 React App에 로그인합니다.
2. 반응 앱 요청은 백엔드 API에서 자격 증명을 회전시킵니다.
3. 백엔드는 사용자 인증 및 승인을 확인합니다.
4. 백엔드는 임시 턴 자격 증명 (사용자 이름/비밀번호)을 동적으로 생성합니다.
5. 백엔드는 자격 증명을 반환하여 응답 앱을 반환합니다.
6. React App은 자격 증명을 사용하여 WebRTC 피어 연결을 구성합니다.
7. 발행 직후 자격 증명이 만료됩니다.
8. 백엔드 사용을 모니터링하고 남용자를 차단합니다.
coturn을 사용한 예제 개념
`Coturn '서버는 REST API를 사용하여 "장기 자격 증명 메커니즘"을 지원합니다.
- 백엔드는`Coturn '서버와 비밀을 공유합니다.
- 타임 스탬프가 포함 된 턴 사용자 이름을 생성합니다.
- 공유 비밀 HMAC로 사용자 이름을 해시하여 암호를 만듭니다.
-이 사용자 이름과 비밀번호 쌍은 타임 스탬프가 만료 될 때까지 유효합니다.
React App은 세션 당이 제한 계산 상태 사용자 이름/비밀번호 쌍만 수신합니다.
실제 반응 측 코드 팁
- 호출을 초기화 할 때 rect hooks (예 :`useeffect`)를 사용하여 턴 자격 증명을 가져옵니다.
- 적절한 인증 토큰 헤더로 자격 증명 페치 API를 보호하십시오.
- 수신 된 턴 자격 증명을 구성 요소 상태 또는 Redux와 같은 글로벌 상점에 저장하십시오.
-이 자격 증명을 WEBRTC API (`rtcpeerconnection` 구성)로 전달하십시오.
피하는 일반적인 실수
- 하드 코딩 하드 코딩 서버 자격 증명을 반응 코드 또는 공개적으로 액세스 할 수있는`.env` 파일로 직접.
- 페이지 재 장전 또는 탭 후에도 지속되는 브라우저 스토리지에 자격 증명을 저장합니다.
- 장기 또는 정적 회전 자격 증명 사용.
- 턴 자격 증명을 제공하는 API 호출을 인증하고 승인하지 못합니다.
React Apps의 인증 및 승인 (일반 보안)
턴 자격 증명 관리는 사용자 인증 및 보안 API 통화를 포함하는 광범위한 React App Security 전략의 일부입니다.
- 보안 인증 프레임 워크 (OAuth, JWT, Auth0, Azure AD)를 사용하여 사용자를 인증하십시오.
-HTTPS를 사용하여 모든 클라이언트 서버 통신을 보호하십시오.
- 로컬 스토리지에 민감한 토큰 또는 자격 증명을 저장하지 마십시오.
-가능하면 인증 토큰을 위해 HTTP 전용 쿠키 또는 메모리 내 상점을 사용하십시오.
- 백엔드에서 액세스 제어를 구현하십시오.
요약
RECT 응용 프로그램에서 Secure Turn 자격 증명 관리는 백엔드 서비스가 임시 단기 자격 증명을 동적으로 발행해야합니다. React 앱은 필요에 따라 이러한 자격 증명을 요청하고 WebRTC 연결에 사용하고 사용 후 버립니다. 이 설계는 노출을 제한하고 남용 위험을 줄이며 고객에게 장기 비밀을 유지합니다. React-Side 처리는 안전한 페치, 메모리 내 스토리지 및 API 호출의 적절한 승인에 중점을 두어야합니다. 보안 강화에는 턴 서버를 사용하여 최신의 안전한 반응 응용 프로그램의 모든 필수 부분에 대한 HTTP, 사용자 인증, 요금 제한 및 남용 탐지가 필요합니다.
이 아키텍처는 보안 위험을 최소화하고 잠재적 오용을 최소화하는 모범 사례와 함께 고객에게 턴 자격 증명을 알아야한다는 기본 제한의 균형을 유지합니다. 오늘날 전문 WebRTC 배포에 채택 된 표준 접근법입니다.