-
Notifications
You must be signed in to change notification settings - Fork 3
๐ TURN ์๋ฒ ์ธ์ฆ ๋ฐฉ์
Junsang Yu edited this page Nov 30, 2024
·
1 revision
-
'classic' long-term credentials mechanism;
'์ ํต์ ์ธ' ์ฅ๊ธฐ ์๊ฒฉ ์ฆ๋ช ๋ฉ์ปค๋์ฆ;
-
TURN REST API (a modification of the long-term mechanism, for time-limited secret-based authentication, for WebRTC applications:ย http://tools.ietf.org/html/draft-uberti-behave-turn-rest-00);
TURN REST API(WebRTC ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ฐ ์ ํ ๋น๋ฐ ๊ธฐ๋ฐ ์ธ์ฆ์ ์ํ ์ฅ๊ธฐ ๋ฉ์ปค๋์ฆ ์์ :ย http://tools.ietf.org/html/draft-uberti-behave-turn-rest-00ย ) ;
-
experimental third-party oAuth-based client authorization option;
์คํ์ ์ธ ํ์ฌ oAuth ๊ธฐ๋ฐ ํด๋ผ์ด์ธํธ ์ธ์ฆ ์ต์ ;
- TURN ์๋ฒ์ ์ค์ ํ ์๊ตฌ์ ์ธ username, password๋ฅผ ์ฐ๋ ๋ฐฉ์
- ํด๋น ์ ๋ณด๋ฅผ ํด๋ผ์ด์ธํธ์ ์ ์ฅํด์ ์ฌ์ฉํด์ผ ๋๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
- ํด๋น ์ธ์ฆ์ ๋ณด๊ฐ ์ ์ถ๋๋ฉด ๋ค๋ฅธ์ฌ๋์ด TURN ์๋ฒ๋ฅผ ๋ง์๋๋ก ์ฌ์ฉํ ์ ์์ด์ ์๋ฒ ๊ณผ๊ธ์ ๋ฌธ์ ๊ฐ ์์ ๋ฏ ํ๋ค.
- ์ ํด์ง ์๊ฐ๋ง ์ ํจํ ์ธ์ฆ ์ ๋ณด๋ฅผ REST API๋ฅผ ํตํด ๋ฐ๊ธํ๋ ๋ฐฉ์
- ์๊ฐ์ด ์ง๋๋ฉด ์ธ์ฆ์ ๋ณด๊ฐ ์ ํจํ์ง ์์์ ํ์ทจ/์ ์ถ์ ๋ ์์ ํ ๋ฐฉ์
-
username
์ ์ ๋์ค ์๊ฐ์ผ๋ก ์ธ์ ๊น์ง ์ ํจํ์ง ์ ํฉ๋๋ค(์์ ์ฝ๋๋ 1์๊ฐ๋์ ์ ํจ) -
hmac
์ ์ด์ ์ coturn ์๋ฒ ์ค์ ์ผ๋ก ์ ํ๋static-auth-secret
๊ฐ์ผ๋ก ์์ฑํฉ๋๋ค -
hmac
์username
์write()
-
hmac
์read()
ํด์ ๋น๋ฐ๋ฒํธ๋ฅผ ์์ฑํฉ๋๋ค - ํด๋น
username
๊ณผpassword
๋ฅผ ํตํด์ turn ์๋ฒ ์ธ์ฆ์ ๋ณด๋ฅผ ์๋ตํ๋ฉด ๋ฉ๋๋ค.
const validSeconds = 1 * 60 * 60; // 1์๊ฐ
const username = (Math.floor(Date.now() / 1000) + validSeconds).toString();
const hmac = createHmac('sha1', process.env.COTURN_SECRET);
hmac.setEncoding('base64');
hmac.write(username);
hmac.end();
const password = hmac.read();
- ํด๋น ์ธ์ฆ์ ๋ณด(username, password)๋ ๋ฐ๊ธํ๊ณ 30์ด๊ฐ ์ ํจ
- ๋ง์ฝ ์ ํจ์๊ฐ์ 30์ด๋ก ์ค์ ํ๋ฉด ๋ฐ๊ธํ์ง 30์ด ๋ค์๋ ์ธ์ฆ์ ๋ณด๊ฐ ์ ํจํ์ง ์์์ ์ธ์ฆ์ ์คํจ
const validSeconds = 30; // ์ ํจ์๊ฐ
const username = (Math.floor(Date.now() / 1000) + validSeconds).toString();
const hmac = createHmac('sha1', process.env.COTURN_SECRET);
hmac.setEncoding('base64');
hmac.write(username);
hmac.end();
const password = hmac.read();
-
์๋ก์ด conf
realm=gomz.kr static-auth-secret=<secret>
- ๐ง ํ ๋น๋ฉ ๋ฐ ๋ธ๋์น ์ ๋ต
- ๐ง ์ฃผ์ ์ ์ ๋ฐ ํ ํ๋ฆฟ ์์ฑ
- ๐ป ํ๋ก์ ํธ ์ด๋ฆ ๋ฐ ๋ก๊ณ ์ ํ๊ธฐ
- ๐ป ๊ธฐํ ์ธ๋ถ์ฌํญ ์ ํ๊ธฐ
- ๐ป ๊ธฐ์ ์คํ ์์
- ๐ป ๋ฐฑ๋ก๊ทธ ์ด์ ์์ฑ
- ๐ป ๊นํ๋ธ ์ํค
- ๐ ๊ธฐํ ๋ฐ MVP ์ ์ง ํ์
- 2๏ธโฃ ์คํ๋ฆฐํธ 2 ์ฃผ๊ฐ ๊ณํ
- ๐งญ ๊ณตํต ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ํ
- ๐ฆบ ์ด๋ฒคํธ ํ๋ฆ๋
- ๐ฅ ๋ฐฑ์๋ ์๊ทธ๋๋ง ์๋ฒ ๋ฌธ์
- ๐ฝ ์คํ๋ฆฐํธ 5โ 6 ๋ฐฉํฅ์ฑ
- ๐ ์ต์ข ๋ฐํ ์ค๋น
- ๐ฟ Github Actions CD(์๋๋ฐฐํฌ)
- ๐ API
- โซ forEach๋ async๋ฅผ ๊ธฐ๋ค๋ ค์ฃผ์ง ์๋๋ค
- ๐งช WebRTC SFU ๋ฐ๋ชจ
- ๐ TURN ์๋ฒ ์ธ์ฆ ๋ฐฉ์
- ๐ ๏ธ [ํธ๋ฌ๋ธ์ํ ] /socket.io ๊ฒฝ๋ก๋ก ์ง์์ ์ผ๋ก HTTP ์์ฒญ์ ๋ณด๋ด๋ ๋ฌธ์
- ๐น WebRTC ํ์ํ์์์ ์นด๋ฉ๋ผ ์ํ์ ๋ฐ๋ฅธ ์์คํ ์์ ์ฌ์ฉ๋ ๋ถ์
- ๐ฅ ๋์นญ NAT์์์ WebRTC ์ฐ๊ฒฐ ์๋ฆฝ ๊ณผ์
- ๐ ํ ์คํธ ์ฝ๋์ ๋ชจํน