- ๋์งํธ์ํจ์ค : ํ๋์ ์์ด๋๋ก ๋ณธ์ธ์ด ์ ํํ ์ธ์ฆ ์๋จ์ ์ฌ์ฉํ์ฌ ์์ ํ๊ณ ํธ๋ฆฌํ๊ฒ ์ฌ๋ฌ ์ ์ ์ ๋ถ ์๋น์ค(์ ๋ถ24, ๊ณ ์ฉ๋ ธ๋๋ถ, ๊ต์ก๋ถ ๋ฑ)๋ฅผ ์ด์ฉํ ์ ์๋ ์ธ์ฆ ์๋น์ค
- ์ฌ์ฉ๋ฐฉ๋ฒ
- ๋์งํธ์ํจ์ค์ ๊ฐ์ ํ ์ ์ ์ ๋ถ ์๋น์ค์์ ๋์งํธ์ํจ์ค ์ฌ์ฉ ๊ฐ๋ฅ
- ๋์งํธ์ํจ์ค์ ์ฌ์ฉ์๊ฐ ์ ๊ณตํ๋ ์ ๋ณด : ์ด๋ฆ, ์ด๋ฉ์ผ, ํด๋ํฐ๋ฒํธ, ์๋ ์์ผ
- ์ธ์ฆ๋ฐฉ๋ฒ
- ๋ชจ๋ฐ์ผ ์ธ์ฆ(์ง๋ฌธ, ์๋ฉด, ํจํด, PIN, ๊ณต๋์ธ์ฆ์)
- ๊ณต๋์ธ์ฆ์(PC)
- 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๊ฐ ๋ค๋ฆ
ํ ์ฌ๋์ด ์ฌ๋ฌ ๊ฐ์ ๊ณ์ ์ ๋ง๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ ์ ๋ง๋ค์ด์ง
- ์ฃผ์์ฌํญ
- ๋์งํธ์ํจ์ค ์ฐ๊ณ๋ ์ ๊ท ํ์๊ฐ์ ์ด ์๋๊ธฐ ๋๋ฌธ์ ๋ก๊ทธ์ธ ์ฐ๊ฒฐ์ ๋ํ ๋์์ ์ฐจ์ ์ถ๊ฐ์ ๋ณด ์ ๋ ฅํ๋ฉด์์ ๋ณ๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅ๋ฐ์ผ๋ฉด ์๋จ (๋ฏธ์ค์ ์ ์ฐ๊ณ ์คํ์ด ์ ํ๋ ์๋ ์์)
- ๋์งํธ์ํจ์ค์์ ์ ๊ณตํ๋ ์ด๋ฆ, ์๋ ์์ผ, ์ ํ๋ฒํธ ๊ฐ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ๋ ฅ(์์ ) ๊ธ์ง
- ํ์ ์ ๋ณด ์ค ๋์งํธ์ํจ์ค์์ ์ ๊ณตํ์ง ์๋ ์ ๋ณด๋ง ์์ง(์ ํ ์ ๋ณด ์ ์ธ)
- ์ ํ์ ๋ณด๋ ๋์ ์ ๋ณดํ๋ฉด ํน์ ํ์ํ ์์ ์์ ์ ๋ ฅ๋ฐ๊ธฐ๋ฅผ ๊ถ์ฅ
- ์ ์ฉ์ฌ๋ก
- ํ์(์์ด๋) ๋ก๊ทธ์ธ
- KTV๊ตญ๋ฏผ๋ฐฉ์ก http://www.ktv.go.kr/ (์์ด๋, ๊ณต์ธ์ธ์ฆ์)
- 1365์์๋ด์ฌ ํฌํธ https://www.1365.go.kr/(๊ฐํธ์ธ์ฆ, SNS, ์์ด๋)
- ๋นํ์(๋ณธ์ธํ์ธ) ๋ก๊ทธ์ธ
- ๋ํ๋ฒ๋ฅ ๊ตฌ์กฐ๊ณต๋จ 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 | ์ฌ์ฉ์์ ํด๋์ ํ๋ฒํธ |
์ฌ์ฉ์์ 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 |
---|---|
์ฌ๋ ๊ถํ ์ ๋ฆฌ (0) | 2023.01.31 |
SNS ์์ ๋ก๊ทธ์ธ(์นด์นด์ค๋ก๊ทธ์ธ) (0) | 2023.01.05 |