사용자들은 자신의 데이터가 어떤 형태의 침입으로부터도 안전하게 보호되기를 기대합니다. 웹RTC에서는 이러한 네트워크를 통해 많은 민감한 데이터가 전송되기 때문에 보안이 매우 중요해집니다. 그렇다면 적절한 보안 방법을 제공하기 위해 어떻게 할 수 있을까요?
답은 토큰입니다. 토큰은 사용자가 RTC 채널에 참여하거나 RTM 시스템에 로그인할 때 인증에 사용되는 동적 키입니다. 토큰은 특정 시간 간격(<24시간) 후에 재생성되어야 하는 시간 제한이 있는 문자열입니다.
이 튜토리얼에서는 자체 토큰을 생성하고 서버에서 가져오는 방법을 살펴보겠습니다. 이 토큰을 사용하여 채널에 참여할 수 있습니다. 자체 서버를 배포하여 토큰을 생성할 수 있으며, 이 예제를 사용할 수도 있습니다. 이 튜토리얼에서는 이 예제를 사용하여 토큰 서버를 만들 것입니다. README.md
파일의 지침을 따라 동일한 서버를 쉽게 배포할 수 있습니다.
필수 조건
- 아고라 개발자 계정 (Agora 시작 방법 참조)
- Flutter SDK
- 아고라 토큰 서버
우리는 이 비디오 콜 데모를 기반으로 사용할 것입니다. 이 데모 위에 토큰 서비스를 추가하여 채널에 참여할 수 있도록 할 것입니다. 솔루션에 대한 자세한 내용은 여기에서 확인할 수 있습니다.
토큰으로 연결하기
토큰 서버를 생성하는 것은 서버에 다음 필드를 포함한 GET 요청을 보내는 것만큼 간단합니다:
- 채널 이름: 모든 토큰은 채널 이름과 연결됩니다. 채널에 참여하려면 모든 사용자가 동일한 토큰 값을 가져야 합니다.
- UID: UID는 채널 내 모든 사용자를 구분하기 위해 사용되는 고유한 정수 값입니다. UID에 0을 전달하면 아고라가 서버 측에서 UID를 생성합니다.
- 만료 시간: 토큰은 동적 값을 포함하기 때문에 일정 시간 후에 갱신되어야 합니다.
이 값은 채널에 가입하기 전에 생성해야 합니다. 왜냐하면 이 값을 joinChannel()
메서드에 전달해야 하기 때문입니다.
토큰 생성
참고: 안드로이드 에뮬레이터를 실행 중이며 로컬에서 실행 중인 토큰 서버에 액세스하려는 경우 다음 URL을 사용하세요: http://10.0.2.2. 왜?
이제 joinChannel()
메서드에 참여하기 전에 getToken()
함수를 다음과 같이 호출할 수 있습니다:
await getToken();
await _engine.joinChannel(token, widget.channelName, null, 0);
연결 유지
토큰은 최대 24시간 동안 유효한 동적 값입니다. 이 시간이 지나면 이 값을 재생성해야 합니다. 새로운 토큰이 생성되어야 하는 시간 간격은 24시간 미만의 임의의 값으로 설정할 수 있습니다.
사용자의 토큰이 30초 이내에 만료될 경우, Agora는 이를 등록하기 위해 tokenPrivilegeWillExpire()
콜백을 제공합니다. 이 콜백을 사용하여 다시 getToken()
함수를 호출해 새로운 토큰을 생성합니다. 새로운 토큰 값을 얻은 후에는 연결을 유지하기 위해 이를 사용해야 하며, 이는 renewToken()
메서드를 호출하여 수행할 수 있습니다.
결론
보안은 모든 웹RTC 애플리케이션에 필수적입니다. 현재 운영 중이거나 생산 환경에 배포된 모든 애플리케이션은 토큰을 사용해야 합니다. 이 튜토리얼에서 설명된 방법을 사용하면 애플리케이션에 토큰을 빠르게 추가하고 애플리케이션이 항상 안전하게 유지되도록 할 수 있습니다.
이 애플리케이션의 전체 코드는 여기에서 확인할 수 있습니다.
기타 자료
아고라 Flutter SDK 및 기타 사용 사례에 대해 자세히 알아보려면 개발자 가이드 를 참조하세요.
위에서 논의된 기능 및 기타 많은 기능에 대한 완전한 문서는 여기에서 확인할 수 있습니다.