iES 비밀번호 변경

iES 비밀번호 변경에 대해 설명합니다.

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

비밀번호 변경요청

샘플 앱에 포함된 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
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);
        }
    }

사용 타입이 비밀번호 변경일 경우 신규 비밀번호를 입력받기위해 SPinManager의 showChangePwdPinpadDialog 메소드로 핀패드를 출력합니다.

신규 비밀번호 저장

사용자의 신규 비밀번호 입력이 끝났다면 SPinManager의 reqChangePwd 메소드로 비밀번호를 저장합니다.

private void reqChangePwd(final Context ctx, String pwd, String cus_id, final PushInfo push_info, String sign, String sign_text) {
        OneShotPadListener<DataResponse> l = new OneShotPadListener<DataResponse>() {
            @Override
            public void onResult(DataResponse res) {
                // 암호 확인 (테스트)
                checkCertPwd(res.cert, res.cert_pwd);
                // 결과 값 반환
                BaseResponse.printLog(res);
                showToast(ctx, res);
                if (res.sign != null) {
                    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();
                            }
                        }
                    };
                    SpVerify.getInstance(ctx).reqVerify("", res.cus_id, res.sign, res.sign_text, push_info.auth_token, l);
                }

            }
        };
        OneShotPadManager.getInstance().reqChangePwdEx(ctx, pwd,  cus_id, push_info, sign, sign_text, l);
    }
이전
다음