디지털원패스

2022. 12. 30. 13:34·STUDY/ETC
반응형
  • 디지털원패스 : 하나의 아이디로 본인이 선택한 인증 수단을 사용하여 안전하고 편리하게 여러 전자 정부 서비스(정부24, 고용노동부, 교육부 등)를 이용할 수 있는 인증 서비스
  • 사용방법
    • 디지털원패스에 가입 후 전자 정부 서비스에서 디지털원패스 사용 가능
    • 디지털원패스에 사용자가 제공하는 정보 : 이름, 이메일, 휴대폰번호, 생년월일

정부24 로그인 화면(gov.kr -> onepass.go.kr)
ID 확인 & 디지털원패스 가입시 설정한 인증방법(인증번호)

  • 인증방법
    1. 모바일 인증(지문, 안면, 패턴, PIN, 공동인증서)
    2. 공동인증서(PC)
    3. SMS 등
  • 행정안전부 디지털원패스를 가입해야 사용 가능
  • 연계방법 : https://www.onepass.go.kr/cnguide (신청-적용-검토후 오픈)

디지털 원패스 연계 방법(상세 - 신청하기)
디지털 원패스 연계 방법(상세 - 적용하기)
디지털 원패스 연계 방법(상세 - 적용 후 오픈)

  • 연계적용 가이드
    • 기존 회원과 디지털원패스 회원 매핑
      • 사용자 식별값을 CI로 사용하는 경우 : User Key 유무를 통해 있으면 바로 로그인 처리/ 없다면 기존회원의 CI에 디지털원패스 정보를 매핑 후 등록한 뒤 로그인 처리
      • 사용자 식별값을 DI로 사용하는 경우 : User Key 유무를 통해 있으면 바로 로그인 처리/ 없다면 DI생성수단을 통해 생성된 DI와 CI, 디지털원패스 정보 등록 후 로그인 처리

* CI : Connecting Information (연계정보) – 본인 확인기관 등에서 개인별로 고유하게 부여하는 개인 식별정보

  어느 업체에서 발급해도 유일하게 발급되므로 이 값이 같으면 동일인으로 판단할 수 있음

  주민등록번호 수집이 금지되면서 인터넷 서비스 업체에서는 휴대폰 본인인증, 공인인증, 신용카드 인증을 통해 CI를 제공받고 있으며

  주민등록번호를 대신해 고객을 구별하는 데이터로 사용

*DI : Duplication Information (중복정보, 중복가입확인정보) – 인증업체별로 사용자에게 부여하는 고유번호

 동일인이라 해도 인증업체가 다르면 DI가 다름

 한 사람이 여러 개의 계정을 만드는 것을 방지하고자 만들어짐

  •  주의사항
    • 디지털원패스 연계는 신규 회원가입이 아니기 때문에 로그인 연결에 대한 동의절차의 추가정보 입력화면에서 별도의 비밀번호를 입력받으면 안됨 (미준수 시 연계 오픈이 제한될 수도 있음)
    • 디지털원패스에서 제공하는 이름, 생년월일, 전화번호 같은 사용자 정보를 입력(수정) 금지
    • 필수 정보 중 디지털원패스에서 제공하지 않는 정보만 수집(선택 정보 제외)
    • 선택정보는 나의 정보화면 혹은 필요한 시점에서 입력받기를 권장
  • 적용사례
    1. 회원(아이디) 로그인
      • KTV국민방송 http://www.ktv.go.kr/ (아이디, 공인인증서)
      • 1365자원봉사 포털 https://www.1365.go.kr/(간편인증, SNS, 아이디)
    2. 비회원(본인확인) 로그인
      • 대한법률구조공단  https://www.klac.or.kr/
      • 당진시 http://www.dangjin.go.kr/

 

원패스 properties 예제

# Site URL : 사이트의 URL
onepass.site.url=https://10.211.55.3:9443/egovframework-all-in-one/
# Site ID : 사이트의 ID(디지털원패스에서 발급)
onepass.site.id=**********
# AES secretKey(length:16) : AES 암호화 키(디지털원패스에서 발급)
aes.secretKey=**********
# PublicKey path(절대경로)
keys.public.path=C:\\eGovFrameDev-4.0.0-64bit\\workspace\\allinone\\src\\main\\resources\\egovframework\\onepass\\pubkey_share.der
# SSL jks path(상대경로)
ssl.keystore=egovframework/onepass/onepass.jks
# ACS path : SAML로그인 요청 후 응답처리 경로(사이트의 로그인 처리를 위한 경로)
onepass.site.path.acs=/uat/uia/onepass/onepassCallback.do
# IDP URL : 디지털원패스 IDP URL
onepass.idp.url=https://saml.egaf2017.com
# Potal URL : API 서버 URL
onepass.potal.url=https://www.egaf2017.com

 

  • 사용자 인증 처리 예시 : 인증화면으로 이동
    • 서비스 타입 : LOGIN, LOGOUT
@RequestMapping(value="/uat/uia/onepass/onepassLogin.do", method=RequestMethod.POST)
public String onepassLogin(HttpServletRequest request, HttpServletResponse response, ModelMap model) {
	String serviceType = request.getParameter("serviceType");
	String action = null;
	String inputName = null;
	String inputValue = null;
	String pageType = OnepassRequestHandler.pageType(request);
 
	try {
		if ("LOGIN".equals(serviceType)) {
			action = OnepassRequestHandler.LOGIN_DEST;
			inputName = OnepassRequestHandler.LOGIN_INPUT_NAME;
			inputValue = OnepassRequestHandler.login();
		} else if ("LOGOUT".equals(serviceType)) {
			action = OnepassRequestHandler.logoutDest(request);
			inputName = OnepassRequestHandler.LOGOUT_INPUT_NAME;
			inputValue = OnepassRequestHandler.logout(request);
		} else {
			action = request.getContextPath()+"/index.do";
			inputName = "";
			inputValue = "";
		}
	} catch (Exception e) {
		return "egovframework/com/cmm/error/onepassAccessDenied";
	}
 
	model.addAttribute("redirectUrl", action);
	model.addAttribute("inputName", inputName);
	model.addAttribute("inputValue", inputValue);
	model.addAttribute("pageType", pageType);
 
	return "egovframework/com/uat/uia/onepass/onepassLogin";
}

 

  • 인증완료 후 응답 처리 예시 : 인증 완료 휴 응답받는 callback 메소드로 인증된 사용자 정보 처리
    • intfToken 과 userKey로 사용자 정보 조회
@RequestMapping(value="/uat/uia/onepass/onepassCallback.do", method=RequestMethod.POST)
public String onepassCallback(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception {
	// 인증체크
	OnepassResponse onepassResponse = OnepassResponseHandler.check(request);
 
	// 인증 성공
	if (onepassResponse.getStatus() == STATUS.SUCCESS  && onepassResponse.getResultCode() == RESULT_CODE.SUCCESS) {
 
		// type 이 LOGIN
		if (onepassResponse.getType() == TYPE.LOGIN) {
			String userKey = onepassResponse.getUserKey();
			String intfToken = onepassResponse.getIntfToken();
 
			// 인증 후 사용자 정보 조회
			ApiSendHandler apiSendHandler = new ApiSendHandler();
			OnepassUserResponse findOnepassUser = apiSendHandler.findUser(userKey, intfToken);
 
			// 사용자 정보 조회 성공
			if (findOnepassUser != null && findOnepassUser.getStatus() == USER_STATUS.USE) {
 
				// 디지털원패스 사용자 정보 - 신규회원일 경우 이 정보를 이용할 수 있음
				LOGGER.info("getId:{}", findOnepassUser.getId()); // 사용자의 ID (최대 30자)
				LOGGER.info("getName:{}", findOnepassUser.getName()); // 사용자의 이름 (최대 70자)
				LOGGER.info("getUserKey:{}", findOnepassUser.getUserKey()); // 사용자 유일값인 user key 가 전달된다. (최대 50자)
				LOGGER.info("getCi:{}", findOnepassUser.getCi()); // 사용자의 CI (최대 255자)
				LOGGER.info("getBirth:{}", findOnepassUser.getBirth()); // 사용자의 생년월일 (최대 8자)
				LOGGER.info("getPhone:{}", findOnepassUser.getPhone()); // 사용자의 휴대전화번호 (최대 14자)
				LOGGER.info("getEmail:{}", findOnepassUser.getEmail()); // 사용자의 E-mail (최대 70자)
				LOGGER.info("getSex:{}", findOnepassUser.getSex()); // 사용자의 성별 (남:M, 여:F)
				LOGGER.info("getNation:{}", findOnepassUser.getNation()); // 내외국인 구분(내국인:L, 외국인:F)
 
				// 기관 아이디 조회
				int usedCnt = egovOnepassService.onePassCheckIdDplct(findOnepassUser.getId());
 
				// 기관 아이디 조회 성공
				if (usedCnt > 0) {
					// 디지털원패스에서 받은 아이디로 회원정보 조회 후 세션 저장
					LoginVO resultVO = loginService.onepassLogin(findOnepassUser.getId());
					resultVO.setOnepassUserkey(userKey);
					resultVO.setOnepassIntfToken(intfToken);
					request.getSession().setAttribute("loginVO", resultVO);
 
					// 로그인 인증세션 추가
					request.getSession().setAttribute("accessUser", resultVO.getUserSe().concat(resultVO.getId()));
					model.addAttribute("resultMessage", egovMessageSource.getMessageArgs("digital.onepass.connect.success", new Object[]{resultVO.getId()}));
					model.addAttribute("redirectUrl", request.getContextPath()+"/index.do");
					return "egovframework/com/uat/uia/onepass/onepassResult";
				}
				// 기관 아이디 조회 실패
				else {
					model.addAttribute("resultMessage", egovMessageSource.getMessage("digital.onepass.connect.join.failure"));
					model.addAttribute("redirectUrl", request.getContextPath()+"/index.do");
					return "egovframework/com/uat/uia/onepass/onepassResult";
				}
			}
			// 사용자 정보 조회 실패
			else {
				model.addAttribute("resultMessage", egovMessageSource.getMessage("digital.onepass.connect.user.infomation.failure"));
				model.addAttribute("redirectUrl", request.getContextPath()+"/index.do");
				return "egovframework/com/uat/uia/onepass/onepassResult";
			}
		}
		// type 이 LOGIN 이 아님
		else {
			model.addAttribute("resultMessage", egovMessageSource.getMessage("digital.onepass.connect.athentication.failure"));
			model.addAttribute("redirectUrl", request.getContextPath()+"/index.do");
			return "egovframework/com/uat/uia/onepass/onepassResult";
		}
	}
	// 인증 실패
	else {
		model.addAttribute("resultMessage", egovMessageSource.getMessage("digital.onepass.connect.athentication.failure"));
		model.addAttribute("redirectUrl", request.getContextPath()+"/index.do");
		return "egovframework/com/uat/uia/onepass/onepassResult";
	}
}
  • 응답 메시지 
digital.onepass.connect.success 기관 아이디 조회 성공
digital.onepass.connect.join.failure 기관 아이디 조회 실패
digital.onepass.connect.user.infomation.failure 사용자 정보 조회 실패
digital.onepass.connect.athentication.failure TYPE 이 LOGIN이 아님
digital.onepass.connect.athentication.failure 인증 실패
  • 사용 가능 정보(디지털 원패스에서 가져오는 정보)
id 사용자의 ID
name 사용자의 이름
userKey 사용자의 유일값(user key)
ci 사용자의 Ci
birth 사용자의 생년월일
phone 사용자의 휴대전화번호
email 사용자의 E-mail
sex 사용자의 성별
nation 내외국인 구분(내국인 : L, 외국인 : F)

 

  • 연동해제 예시 : 디지털원패스와의 연동을 해제
@RequestMapping(value="/uat/uia/onepass/onepassCancel.do", method=RequestMethod.POST)
public String onepassCancel(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception {
	ApiSendHandler apiSendHandler = new ApiSendHandler();
	String userKey = request.getParameter("userKey");
	String intfToken = request.getParameter("intfToken");
 
	OnepassUserResponse onepassUser = apiSendHandler.InterLockRelease(userKey, intfToken);
 
	if (Objects.isNull(onepassUser)) {
		onepassUser = new OnepassUserResponse();
		model.addAttribute("resultMessage", egovMessageSource.getMessage("digital.onepass.connect.athentication.failure"));
		model.addAttribute("redirectUrl", request.getContextPath()+"/uat/uia/actionLogout.do");
		return "egovframework/com/uat/uia/onepass/onepassResult";
	} else {
		if (onepassUser.getProcess_result() == PROCESS_RESULT.SUCESS) {
			model.addAttribute("resultMessage", egovMessageSource.getMessage("digital.onepass.disconnect.success"));
			model.addAttribute("redirectUrl", request.getContextPath()+"/uat/uia/actionLogout.do");
			return "egovframework/com/uat/uia/onepass/onepassResult";
		} else {
			model.addAttribute("resultMessage", egovMessageSource.getMessage("digital.onepass.connect.user.infomation.failure"));
			model.addAttribute("redirectUrl", request.getContextPath()+"/uat/uia/actionLogout.do");
			return "egovframework/com/uat/uia/onepass/onepassResult";
		}
	}
}

 

 

반응형
저작자표시 (새창열림)

'STUDY > ETC' 카테고리의 다른 글

TCP/IP 정리  (0) 2024.05.22
슬랙 권한 정리  (1) 2023.01.31
SNS 소셜 로그인(카카오로그인)  (0) 2023.01.05
'STUDY/ETC' 카테고리의 다른 글
  • TCP/IP 정리
  • 슬랙 권한 정리
  • SNS 소셜 로그인(카카오로그인)
3unB
3unB
  • 3unB
    ILLILI
    3unB
  • 전체
    오늘
    어제
    • 분류 전체보기 (158)
      • STUDY (107)
        • JAVA (30)
        • SPRING (29)
        • JSP (11)
        • DATABASE (19)
        • HTML (0)
        • CSS (4)
        • GITHUB (2)
        • ETC (4)
        • 자격증 (1)
        • ERROR (6)
      • PROJECT (6)
        • Personal_Project 01 - commu.. (1)
        • TeamProject - JOINUS (4)
      • EUNB (30)
        • 맛집 (27)
        • 여행 (3)
        • 전세사기 (0)
      • 오블완챌린지 ++ (11)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 짱민지
    • 아랄이
  • 공지사항

  • 인기 글

  • 태그

    전포 밥집
    전포 맛집
    전포동 카페
    콩콩팥팥 맛집
    센텀 신세계백화점 팝업
    전포 연어덮밥
    속초 숙소 내돈내산
    mysql
    속초 중앙시장 감자전
    alter
    전포 오꼬노미야끼
    콩콩팥팥 두부
    전포동 맛집
    망미 조용한 카페
    망미 바
    배열 한 컬럼에 넣기
    서면 설야멱
    티스토리챌린지
    오블완
    서면 맛집
    인제 두부
    인제 고향집
    전포 데이트
    전포동 핫플
    속초 해변 숙소
    Database
    망미 카페
    oracle
    망미 테린느
    전포 신상 맛집
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.0
3unB
디지털원패스
상단으로

티스토리툴바