iES 인증

iES 서비스를 이용한 인증을 설명 합니다.

  1. 인증 요청 및 핀패드 오픈
  2. 푸시 수신 대기
  3. 푸시 수신후 암복호화 과정 진행
  4. 패스워드 입력
  5. 인증 절차 진행
  6. 인증성공여부 확인

인증 요청

샘플 앱에 포함된 MainActivity.java의 reqPush 메소드를 참고해 주세요

    private void reqPush(final String used_type, String signData) {
        String cus_id = mEtCusId.getText().toString();
        //String cert_no = mEtCertNo.getText().toString();
        String add_cus_id = mEtAddCusId.getText().toString();

        SPinManager.getInstance().reqPush(this, used_type, cus_id,  add_cus_id, signData);
    }

signData 패러미터는 전자서명시 추가되는 값입니다. 전자서명에 추가할 내용을 문자열 형태로 추가하해 주세요 used_type 패러미터는 사용타입 입니다. 아래표를 참고하여 알맞은 타입값으로 설정해주세요

사용타입 코드
로그인 2
비밀번호변경 4
해지 5
푸시토큰 업데이트 6
생체인증 가입 8
생체인증 9
생체인증해지 10

이제 SPinManager의 reqPush 메소드를 살펴 봅시다

public void reqPush(final Context ctx, final String used_type, final String cus_id, final String add_cus_id, final String signData) {
        OneShotPadListener<DataResponse> l = new OneShotPadListener<DataResponse>() {
            @Override
            public void onResult(DataResponse res) {
                BaseResponse.printLog(res);
                showToast(ctx, res);
                // 결과 값 반환
                if (res.code.equals(BaseResponse.CD_OK)) {
                    startPushTimeout(ctx, cus_id); // 푸시 타임아웃 시작
                    if (used_type == OneShotPadManager.USED_TYPE_BIO_AUTH) {
                        showBioAuthPinpadDialog(ctx, add_cus_id, cus_id, signData);
                    } else {
                        showAuthPinpadDialog(ctx, add_cus_id, cus_id, signData);
                    }
                } else if (res.code.equals(BaseResponse.CD_PUSH_TOKEN)) {
                    initGcm(ctx, true);
                }
            }
        };
        OneShotPadManager.getInstance().reqPushEx(ctx, used_type, cus_id, add_cus_id, l);
    }

이제 SPinManager의 reqPush메소드는 푸시를 요청하고 핀패드를 출력하고 푸시 수신대기를 합니다.

인증 확인

푸시가 수신되고 핀패드의 입력이 끝났다면, SPinManager의 reqAuthPinPad 메소드로 인증을 완료 합니다.

private void reqAuthPinPad(final Context ctx, String pwd, String add_cus_id, final String cus_id, final String signData) {
        OneShotPadListener<DataResponse> l = new OneShotPadListener<DataResponse>() {
            @Override
            public void onResult(final DataResponse res) {
                BaseResponse.printLog(res);
                showToast(ctx, res);
                if (res.code.equals(BaseResponse.CD_OK)) {
                    if (!OneShotPadManager.USED_TYPE_CLOSE.equals(mPushInfo.used_type)) { // 해지 요청이 아닌 경우
                        if (true/*certSign(res.cert, res.cert_pwd)*/) { // Sign..
                            Log.d(TAG, "Sign 성공!!");
                            if (OneShotPadManager.USED_TYPE_CHANGE_PWD.equals(mPushInfo.used_type)) { // 비밀번호 변경
                                try {
                                    showChangePwdPinpadDialog(ctx, new String(res.cert_pwd.getData()), cus_id, mPushInfo, res.sign, res.sign_text);
                                } catch (KSException e) {
                                    e.printStackTrace();
                                }
                            } else {
                                SpVerifyListener<SpVerifyResponse> l = new SpVerifyListener<SpVerifyResponse>() {
                                    @Override
                                    public void onResult(SpVerifyResponse sres) {
                                        if (sres.resultData.getCode().equals(BaseResponse.CD_OK)) {
                                            //검증 성공
                                            //Toast.makeText(ctx,"검증 성공",Toast.LENGTH_LONG).show();
                                            // 비밀번호 변경
                                            if (OneShotPadManager.USED_TYPE_CHANGE_PWD.equals(mPushInfo.used_type)) { // 비밀번호 변경
                                                try {
                                                    showChangePwdPinpadDialog(ctx, new String(res.cert_pwd.getData()), cus_id, mPushInfo, res.sign, res.sign_text);
                                                } catch (KSException e) {
                                                    e.printStackTrace();
                                                }
                                            } else {

                                            }
                                        }

                                        mPushInfo = null;
                                        mTempPwd = null;
                                        mTempAddCusId = null;
                                        mSignData = null;
                                        mCus_id = null;
                                    }
                                };
                                SpVerify.getInstance(ctx).reqVerify("", res.cus_id, res.sign, res.sign_text, mPushInfo.auth_token, l);
                            }

                        } else {
                            Log.e(TAG, "Sign 실패..");
                        }
                    }
                }

            }
        };
        if (mPushInfo == null) { // 푸시가 아직 도착하지 않음
            if (mIsPushTimeout) { // 푸시 타임아웃이 종료되기 전..
                showPushProgressDialog(ctx, pwd, add_cus_id, cus_id, signData);
            } else {
                Toast.makeText(ctx, "간편인증 응답 실패.", Toast.LENGTH_SHORT).show();
            }
        } else {
            OneShotPadManager.getInstance().reqAuthPinPadEx(ctx, pwd, mPushInfo, add_cus_id, cus_id, signData, l);
        }
    }
이전
다음