인증
• 인증을 위한 준비
PRODUCTKEY는 일반키와 인증키의 2가지 타입이 있습니다. 기본적으로 제공되는 키는 일반키이며 일반키는 인증과정을 거치지 않습니다. 가입자 전용 페이의 PRODUCTKEY 설정 팝업에서 인증키로 변경할 수 있습니다. 인증키의 경우 해당 그룹에 접속 할 경우 (openGroup) 인증과정을 무조건 거치도록 되어 있습니다. 인증을 위해서는 BUSINESS SERVER의 인증 URL을 입력해야 합니다. DPMessage에서 로그인 하시면 해당 인증키를 발급 받으실 수 있으며 발급받은 인증키에 대한 인증 URL을 설정 화면에서 입력하시면 됩니다.
• DPMessage 에서의 인증
DPMessage 에서의 인증은 일반적인 user 에 대한 Business 인증이 아닙니다. 해당 Client 에 ProductKey, groupname, userid 를 기반으로 최초 접속에 대한 인증키를 발급함으로써 다른 패킷 변조등을 통해 해당 Client 인듯 속이고 들어올 수 없도록 인증하는 형태입니다.
인증은 그룹 단위로 이루어지며 인증키를 1 차로 BISINESS SERVER 와 DPMessage 서버의 통신을 통해서 발급받으며 해당 인증키를 Client 로 전달하여 DPMessage 서버와의 인증을 하는 형태입니다.
• 인증을 위한 함수
openGroup 의 파라미터로 다음과 같이 선언하도록 되어 있습니다.
- groupname (String) required
임의의 그룹명 - options (Object) optional
DPMessage 옵션정보
- custevent (Boolean) : 그룹에서 CUSTMER INFO 이벤트를 callback 받는 유무, 기본값 false
- custinfo (Object) : 연결된 그룹의 CUSTOMER 정보
- sendevent (Boolean) : 해당 그룹의 client가 send 함수를 사용가능한 유무. 기본값 false
- authparam (String) : 인증URL 전달 파라미터
- authcallback (Function) : 인증 후 실행될 callback함수
- callback (Function) optional
그룹이 생성된 후의 이벤트가 필요할 경우 선언
options 에서 authparam 과 authcallback 두가지를 제공하는데 이것은 BUISNESS SERVER에서의 인증을 위해서 필요한 내용입니다. Client 에서는 다른 부분에 대한 세팅이 필요없습니다.
서버 API 의 경우 등록된 인증 URL 의 서버 프로그램에서 다음의 샘플처럼 함수를 CALL 하시면 됩니다. PHP 소스를 샘플로 하도록 하겠습니다.
include "dpmessage.php"; $dpmessage = new DPServer("TESTCHAT"); echo $dpmessage->genAuthKey($_REQUEST['groupname'], $_REQUEST['userid'], array());
기본선언은 다음과 같습니다.
$dpmessage->genAuthKey('그룹명', 'userid', 'CUSTOMER INFO 정보');
- groupname (String) required
전달받은 그룹명 - userid (String) required
전달받은 userid - custinfo (String) requried
접속하려는 user 의 CUSTOMER 정보
위의 소스 내용을 그대로 카피하셔서 인증 URL 서버 페이지에 넣으시면 DPMessage 인증과정은 완료됩니다. CUSTOMER INFO를 인증 시에 서버에서 바로 넘길 수 있습니다. BUSINESS SERVER가 있는 경우 CUSTOMER INFO를 Client가 아닌 SERVER에서 바로 DPMessage에 전달이 가능합니다. 다만 Client와 BUINSESS SERVER 둘다 CUSTOMER INFO가 선언되어 있는 경우 Client의 데이터를 우선으로 합니다.
• BUSINESS 인증 방법
실제로 인증은 사이트에서 로그인 등의 인중 후에 받은 세션, 쿠키 등의 서버 스토리지에 저장된 값으로 이루어집니다. DPMessage 에서는 이러한 BUSINESS 인증을 자체적으로 지원하지 않습니다. 고객이 직접 인증 URL 에서 세션, 쿠키 혹은 도메인을 기반으로 직접 인증을 해야 합니다. 인증 URL 에 전달되는 내용을 토대로 접속 가능 여부를 인증 URL 서버 프로그램에서 직접 작성하셔야 합니다. 간단한 예제로 다음과 같이 하시면 됩니다.
include "dpmessage.php"; $dpmessage = new DPServer("TESTCHAT"); // TODO 여기에 인증관련 비지니스 로직 추가 if([인증여부]) { // 만약 인증된 유저면 echo $dpmessage->genAuthKey($_REQUEST['groupname'], $_REQUEST['userid'], array()); } else { // 인증이 안된 유저면 echo ""; }
BUSINESS 인증을 위해서 Client 에 opengroup 함수에서 다음의 두가지 option 을 제공합니다. authparam 은 Client 에서 BUSINESS 인증을 위해 넘겨야 할 데이터가 존재 할 경우 사용됩니다. String 형태로 다음과 같이 정의 하시면 됩니다. {‘authparam’ : “param1=param1¶m2=param2″} 데이터의 전달은 POST 형태로 전달됩니다. 다른 옵션인 authcallback 의 경우 인증 후에 처리해야 할 일이 있을 경우 사용됩니다. Function 형태로 다음과 같이 정의하시면 됩니다. {‘authcallback’ : [callback function]}
간단한 예로 다음과 같이 사용하시면 됩니다.
var authcallback = function(resultcode, resultdesc) { if(resultcode == 0) { alert("인증이 완료되었습니다."); } else { alert("인증이 실패했습니다. : " + resultdesc); } } group = client.opengroup('chat-group', { 'authparam' : "param1=param1¶m2=param2", 'authcallback' : authcallback });