이번 문제의 발생은 회원데이터가 연동되어있는 서로 다른 서버에 실명인증서비스를 추가 하는 과정에서 한쪽 서버에 DLL을 설치 할 수 없는 상황이 되어버렸다.
따라서 한쪽 서버에 설치되어있는 모듈을 이용해서 설치가 안되는 사이트의 인증을 하기 위해 사용한 방법이다.
검색을 통해서 자바스크립트로 다른 여러 방법을 시도 해봤지만 잘 되지 않아서 결국 무식한 방법을 써야 했다.
우선 a.com 과 b.com 두개의 사이트가 있다. b.com 은 서버에 DLL을 설치 할수 없어서 인증과정을 진행할 수 없다.
// b.com 페이지에서 a.com 의 인증할 수 있는 페이지를 팝업창으로 띄운다.
pccwin = window.open("","pccV4","width=500,height=500");
form.target = "pccV4";
form.action = "http://a.com/pccV4_sample_seed.asp";
pccwin = window.open("","pccV4","width=500,height=500");
form.target = "pccV4";
form.action = "http://a.com/pccV4_sample_seed.asp";
// http://a.com/pccV4_sample_seed.asp 이곳에서 실명인증과정이 진행되고 리턴값으로 DI(가상주민등록번호) 를 받게 되는데
opener.document.form.di.value = return_value;
// 이 경우 b.com 에서 a.com 페이지를 팝업으로 오픈한 것이라 도메인이 틀려서 opener 가 엑세스 할 수 없다는 에러가 나온다.
여기서 부터가 문제다. opener를 쓸 수 없는 상황에서 부모창에 리턴값을 전달해야 한다.
그래서 인증이 진행된 a.com 팝업창에서 결과값을 리턴받았을때 이 값을 다시 form post 로 b.com 이 리시브 페이지로 전달하고 이곳에서 opener 를 사용하기로 하였다.
// 팝업창에서 인증이 진행된 후 http://a.com/pccV4_result_seed.asp 로 DI 값이 리턴 되었다.
<form name="frm" method="post" action="http://b.com/receive.asp">
<input type="hidden" name="return_di" value="<%=di%>">
</form>
<script>document.frm.submit();</script>
<form name="frm" method="post" action="http://b.com/receive.asp">
<input type="hidden" name="return_di" value="<%=di%>">
</form>
<script>document.frm.submit();</script>
// 이하 http://b.com/receive.asp
<%
di_value = request.form("return_di")
%>
<script>
opener.document.form.di.value = "<%=di_value%>";
self.close();
</script>
// 팝업을 띄운 b.com과 DI값을 전달받은 b.com/receive.asp 가 같은 도메인이기 때문에 opener 전달이 정상적으로 되었다.
<%
di_value = request.form("return_di")
%>
<script>
opener.document.form.di.value = "<%=di_value%>";
self.close();
</script>
// 팝업을 띄운 b.com과 DI값을 전달받은 b.com/receive.asp 가 같은 도메인이기 때문에 opener 전달이 정상적으로 되었다.