들어가며
본인확인 기능을 개발하기 위해 팀에서는 나이스 본인확인 서비스를 도입했습니다. 나이스에서 제공하는 개발 가이드를 보면서 도입을 해야 했는데, 배경 지식이 전혀 없는 상황에서 도입을 하려고 하니 여러 삽질을 거쳐야만 했습니다. 나이스 인증을 도입하는 다른 분들이 저와 같은 어려움을 겪지 않았으면 하는 바람으로, 나이스 인증 기능을 어떻게 도입했는지를 상세하게 작성해 보려 이 글을 적습니다.
나이스 본인확인
나이스평가정보에서 제공하는 API는 여러 종류가 있는데, 본인인증(통합형)을 도입하는 방법에 대해 알아보겠습니다. 이 과정을 코드를 보면서 따라가고 싶으신 분들은 코드를 레포지토리에 올려두었으니 함께 확인해 주시면 됩니다.
공식 개발 가이드에서 나와있는 구성 방법입니다. 위처럼 설명되어 있으나, 처음 구현하는 입장에서는 가이드의 내용이 잘 이해가 가지 않을 수 있습니다. 그래서 아래 과정으로 거쳐서 구현한다고 이해해 주시면 됩니다.
지금부터 1번부터 11번까지의 과정을 모두 거쳐서 본인확인 기능을 도입해 보겠습니다.
기관 토큰 발급
1, 2번인 기관 Token을 발급 기능 구현을 먼저 살펴보겠습니다. 먼저 NICE API를 이용하기 위해 NICE로부터 access_token을 발급받아야 합니다. 토큰발급 API를 호출하면 NICE로부터 50년 유효한 토큰을 발급받습니다. 그럼 기관 토큰 요청을 하는 방법을 알아보겠습니다.
먼저 토큰발급 API를 호출합니다. grant_type이 client_credentials입니다. Client Credentials Grant 방식이 무엇인지 간단하게 살펴보겠습니다.
Client Credentials Grant
Client Credentials Grant 방식은 클라이언트의 자격증명만으로 Access Token을 획득하는 방식입니다. OAuth2의 권한 부여 방식 중 가장 간단한 방식입니다. 서버에 Client ID와 Client Secret을 보내 토큰을 받고, 전달받은 토큰을 API 헤더에 붙여서 요청하는 방식입니다. 이 방식은 자격증명을 안전하게 보관할 수 있는 클라이언트에서만 사용되어야 하며, Refresh Token은 사용할 수 없습니다.
즉 서버에 저장되어 있는 client_id, client_secret 값을 NICE 서버에 전달하면 NICE 서버에서는 NICE 서버의 API 호출을 할 때 필요한 access_token을 전달합니다. 그럼, 서버에 client_id와 client_secret 값이 저장되어 있어야 NICE로부터 Access Token 값을 전달받을 수 있기 때문에 client_id와 client_secret 값을 얻는 방법을 먼저 알아보겠습니다.
Client Id, Secret 값 조회
먼저 NICE에 로그인을 해서 APP을 등록하면, 등록된 앱 정보가 보입니다. 여기서 상세 보기를 클릭합니다.
그 후 인증키 조회 버튼을 클릭합니다.
비밀번호를 입력하는 화면에는, NICE 홈페이지에서 로그인할 때 사용한 비밀번호를 입력합니다.
비밀번호를 입력하면 Client ID와 Secret 값을 얻을 수 있습니다.
허용 IP 등록
일단 local 환경에서 API 테스트를 진행할 것이기 때문에, 로컬 환경의 ip 주소를 허용 ip에 등록합니다. 허용 ip에 localhost 등록은 불가능하기 때문에, 현재 사용하고 있는 인터넷 환경의 ip를 등록해주셔야 합니다.
POST /digital/niceid/oauth/oauth/token HTTP/1.1
Host: svc.niceapi.co.kr:22001
Content-type: application/x-www-form-urlencoded;charset=utf-8
Authorization: Basic Base64Encode(client_id:client_secret)
기관 토큰 발급 API 호출
그 후 위 정보를 활용해서 API를 호출합니다.
위와 같이 코드를 작성하고 API를 호출하면 아래처럼 출력됩니다.
API를 정상 호출하면 위와 같은 응답값을 받을 수 있습니다.
만약 API 호출에서 잘못된 요청으로 나오는 경우 API의 GW_RSLT_CD의 코드를 보고 문제를 파악해야 합니다.
저 같은 경우는 로컬에서 테스트하면서 허용 ip를 제대로 등록하지 않은 경우, API 호출이 정상적으로 처리되지 않아서 ip 등록하는 데 시간이 좀 걸렸습니다. 여기까지 해서 NICE로부터 accessToken을 전달받으면, 암호화 토큰 요청 API를 호출할 수 있습니다.
마치며
다음 글에서는 NICE 표준창을 호출하고, NICE로부터 받은 데이터를 복호화해서 원하는 정보를 추출하는 로직을 함께 살펴보겠습니다.
출처
'Project > 서버 개발' 카테고리의 다른 글
[Project] 프로젝트 삽질기65 (feat 나이스 인증 3) (0) | 2024.06.24 |
---|---|
[Project] 프로젝트 삽질기64 (feat 나이스 인증 2) (0) | 2024.06.24 |
[Project] 프로젝트 삽질기62 (feat sentry 잘 활용하기) (0) | 2024.05.19 |
[Project] 프로젝트 삽질기61 (feat IAM MFA 강제) (0) | 2024.05.16 |
[Project] 프로젝트 삽질기60 (feat aws-vault) (0) | 2024.05.15 |