서버 인증 설정
IOSignal JS·CLI 7.2.0 기준입니다. 인증과 암호화 개념을 먼저 확인하세요.
서버측 인증 정보 연동
iosignal-cli 서버는 인증 옵션을 지정하지 않으면 인증 제공자를 설정하지 않습니다. 인증을 사용하려면 JSON·JavaScript 파일, 명령 인자 또는 Redis로 인증 정보를 공급합니다. CLI 7.2.0의 인증 옵션을 함께 지정하면 --auth-file → --auth-param → --auth-redis 순서로 하나만 선택됩니다.
인증정보를 기록한 JSON 파일을 사용하는 인증방식
iosignal-cli 저장소의 auth_file_sample/auth_file.json에 예제가 있습니다. 전역 설치 후에는 별도로 준비한 인증 파일의 경로를 지정합니다. 서버 포트도 함께 지정해야 합니다.
io-server -l 7777 --auth-file ./auth_file.json
인증파일의 구조와 제한
JSON 파일은 [id, key, cid, level] 배열들의 목록입니다. ID, 공유 키, CID와 숫자형 quota 레벨을 기록합니다. 키는 파일에 평문으로 저장됩니다.
- 장치 ID는 최대 8바이트입니다. 예제처럼 ASCII 문자를 사용하면 최대 8문자입니다.
- 장치 키는 SHA-256으로 변환되어 사용됩니다.
- CID는 IOSignal의
SIZE_LIMIT.CID기준 최대 12바이트입니다. - JSON은 주석을 지원하지 않으며 문자열은 큰따옴표로 묶습니다.
[
["id", "key", "cid", 1],
["did2", "did2key", "did2-cid", 1],
["uno3", "uno3-key", "uno3-cid", 1]
]
JavaScript 인증 파일은 같은 배열 목록을 export const authInfo = [...] 형태로 제공합니다. 예제는 auth_file_sample/auth_file.js에 있습니다.
명령 인자는 id.key.cid.level 형식이고 여러 항목은 쉼표로 구분합니다.
io-server -l 7777 --auth-param 'uno3.uno3-key.uno3-cid.1'
명령행 인자는 셸 이력이나 프로세스 목록에 남을 수 있으므로 서버 인증 정보는 파일 사용을 권장합니다.
Redis 및 기타 데이터베이스 연동
Redis가 실행 중이고 인증 자료가 등록되어 있어야 합니다. iosignal-cli 저장소의 test_auth_redis/에 인증 데이터 등록 예제와 서버 예제가 있습니다. 아래 명령은 해당 저장소 디렉터리에서 실행합니다.
node test_auth_redis/redis_addAdmin.js admin admin-key admin
node test_auth_redis/redis_addMultipleDevice.js uno 1 10
node test_auth_redis/redis_add_get_device.js
node test_auth_redis/server-auth-redis.js
앞의 세 스크립트는 Redis에 예제 데이터를 기록합니다. 관리자·다중 장치 예제는 Redis SAVE도 호출합니다. 다중 장치 예제는 ID와 같은 키를 생성합니다. 서버 예제의 기본 WebSocket 포트는 7777입니다.
라이브러리에서 인증을 구성할 때는 BohoAuth와 FileKeyProvider, StringKeyProvider, RedisKeyProvider를 참고하세요.
Redis 인증 서버 구동
별도 io-server-redis 명령은 없습니다. io-server의 --auth-redis 옵션을 사용합니다.
io-server -l 7777 --auth-redis
기본 Redis 주소는 localhost:6379이며 REDIS_HOST, REDIS_PORT 환경변수로 변경합니다. 다음 구문은 macOS·리눅스 셸 기준입니다.
REDIS_HOST=127.0.0.1 REDIS_PORT=6379 io-server -l 7777 --auth-redis
Redis 연결 완료 후 서버가 시작됩니다. 연결 제한 시간은 5초이며 자동 재접속은 사용하지 않습니다. 연결 실패 시 오류와 종료 코드 1을 반환합니다.
클라이언트의 인증
위 JSON 예제로 서버를 실행한 뒤 다른 터미널에서 다음 명령으로 연결합니다.
io-client -i uno3 -k uno3-key
# 같은 인증 정보의 단축 표기
io-client --auth-idKey uno3.uno3-key
-i와 -k를 모두 지정하면 --auth-idKey보다 우선합니다. 인증 성공 후 id를 입력하면 등록한 CID인 uno3-cid와 연결 상태를 확인할 수 있습니다.
실행 중 auth uno3 uno3-key는 자동 로그인용 인증 정보를 설정합니다. login uno3 uno3-key는 서버의 인증 challenge를 이용해 로그인을 시도합니다. 둘 다 단일 id.key 인자를 받을 수 있습니다.
Node.js에서 JSON 인증 파일 사용
위 auth_file.json을 실행 디렉터리에 준비하고 server.mjs를 작성합니다.
import { Server, BohoAuth, FileKeyProvider } from 'iosignal';
const auth = new BohoAuth(new FileKeyProvider('./auth_file.json'));
const server = new Server({ port: 7777, membersOnly: true }, auth);
server.on('ready', () => console.log('인증 서버 준비'));
node server.mjs로 실행한 뒤 io-client -i uno3 -k uno3-key로 연결합니다. membersOnly: true는 익명 이용을 허용하지 않는 구성입니다. 파일의 예제 키는 실습용이며 실제 장치에는 별도 키를 발급하세요.