연동매뉴얼

.NET Core API

(ASP.NET Core)

kakaoCert ASP.NET Core 튜토리얼

ASP.NET Core 개발환경에서 NuGet을 이용하여 kakaoCert SDK를 추가한 후 본인인증 요청 기능을 구현하는 예시입니다.

1. kakaoCert SDK 패키지 추가 및 연동환경 설정.NET Core 2.1Visual Studio 2019

① [프로젝트 > NuGet 패키지 관리] 메뉴에서 kakaocert를 검색하여 최신 버전의 패키지를 설치합니다.

NuGet 패키지 관리를 이용한  kakaoCert .NET Core SDK 추가 예시 화면

② 아래 코드를 참고하여 SDK를 추가한 프로젝트의 Startup.cs 파일 상단에 using Kakaocert 추가 후, KakaocertInstane 클래스를 생성하고 Startup 클래스의 ConfigureServices() 함수에 의존성 주입 패턴으로 Singleton 서비스 인스턴스를 추가합니다.

③ KakaocertInstane 클래스 안에 linkID, secretKey 변수에 연동신청하여 발급 받은 링크아이디(LinkID)와 비밀키(Secretkey)를 입력해야 합니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

using Kakaocert;

public class KakaocertInstane
{
     // 연동신청 후 메일로 발급받은 링크아이디(LinkID)와 비밀키(SecretKey)값 으로 변경하시기 바랍니다.
    private string linkID = "TESTER";
    private string secretKey = "SwWxqU+0TErBXy/9TVjIPEnI0VTUMMSQZtJf3Ed8q3I=";

    // kakaoCert 서비스 객체 선언
    public KakaocertService kakaocertService;

    public KakaocertInstane()
    {
        // kakaoCert 서비스 객체 초기화
        kakaocertService = new KakaocertService(linkID, secretKey);

        // 인증토큰 IP 제한기능 사용여부, 권장(true)
        kakaocertService.IPRestrictOnOff = true;
    }
}

namespace kakaocertExample
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });


            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

            // kakaoCert 서비스 객체 의존성 주입
            services.AddSingleton<KakaocertInstane>();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseCookiePolicy();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }
    }
}

2. 본인인증 요청 기능 구현

① 아래 코드를 참고하여 VerifyAuthController를 생성하고 생성자 함수에 인스턴스 객체를 할당하고, 본인인증 요청(RequestVerifyAuth) 함수 호출 코드를 입력합니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;

using Kakaocert;

namespace kakaocertExample.Controllers
{
    public class VerifyAuthController : Controller
    {
        private readonly KakaocertService _kakaocertService;

        public VerifyAuthController(KakaocertInstane KakaocertVerifyAuth)
        {
            // kakaoCert 서비스 객체 주입
            _kakaocertService = KakaocertVerifyAuth.kakaocertService;
        }

        public IActionResult RequestVerifyAuth()
        {
            /**
             * 본인인증을 요청합니다.
             * - 본인인증 서비스에서 이용기관이 생성하는 Token은 사용자가 전자서명할 원문이 됩니다. 이는 보안을 위해 1회용으로 생성해야 합니다.
             * - 사용자는 이용기관이 생성한 1회용 토큰을 서명하고, 이용기관은 그 서명값을 검증함으로써 사용자에 대한 인증의 역할을 수행하게 됩니다.
             */

            // kakaoCert 이용기관코드, kakaoCert 파트너 사이트에서 확인
            string clientCode = "020040000001";

            RequestVerifyAuth requestObj = new RequestVerifyAuth();

            // 고객센터 전화번호, 카카오톡 인증메시지 중 "고객센터" 항목에 표시
            requestObj.CallCenterNum = "1600-9999";

            // 인증요청 만료시간(초), 최대값 : 1000  인증요청 만료시간(초) 내에 미인증시, 만료 상태로 처리됨 (권장 : 300)
            requestObj.Expires_in = 300;

            // 수신자 생년월일, 형식 : YYYYMMDD
            requestObj.ReceiverBirthDay = "19700101";

            // 수신자 휴대폰번호
            requestObj.ReceiverHP = "01012341234";

            // 수신자 성명
            requestObj.ReceiverName = "테스트";

            // 별칭코드, 이용기관이 생성한 별칭코드 (파트너 사이트에서 확인가능)
            // 카카오톡 인증메시지 중 "요청기관" 항목에 표시
            // 별칭코드 미 기재시 이용기관의 이용기관명이 "요청기관" 항목에 표시
            requestObj.SubClientID = "";

            // 인증요청 메시지 부가내용, 카카오톡 인증메시지 중 상단에 표시
            requestObj.TMSMessage = "TMSMessage";

            // 인증요청 메시지 제목, 카카오톡 인증메시지 중 "요청구분" 항목에 표시
            requestObj.TMSTitle = "본인인증 요청";

            // 토큰 원문
            requestObj.Token = "TMS Token";

            // 인증서 발급유형 선택
            // true : 휴대폰 본인인증만을 이용해 인증서 발급
            // false : 본인계좌 점유 인증을 이용해 인증서 발급
            // 카카오톡 인증메시지를 수신한 사용자가 카카오인증 비회원일 경우, 카카오인증 회원등록 절차를 거쳐 은행계좌 실명확인 절차를 밟은 다음 전자서명 가능
            requestObj.isAllowSimpleRegistYN = false;

            // 수신자 실명확인 여부
            // true : 카카오페이가 본인인증을 통해 확보한 사용자 실명과 ReceiverName 값을 비교
            // false : 카카오페이가 본인인증을 통해 확보한 사용자 실명과 RecevierName 값을 비교하지 않음.
            requestObj.isVerifyNameYN = true;

            // PayLoad, 이용기관이 생성한 payload(메모) 값
            requestObj.PayLoad = "memo info";

            try
            {
                var result = _kakaocertService.requestVerifyAuth(clientCode, requestObj);
                return View("RequestVerifyAuth", result);
            }
            catch (KakaocertException ke)
            {
                return View("Exception", ke);
            }

        }
    }
}

① requestVerifyAuth 함수 호출에 대해 예외가 발생하지 않았을 때 접수아이디를 확인하기 위한 /Views/Shared/RequestVerifyAuth.cshtml 파일을 추가합니다.

@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>kakaocert .NET Core Example</title>
</head>
<body>
    <p>Response</p>
    <div>
        <fieldset>
            <legend>본인인증 요청</legend>
            <ul>
                <li>접수아이디(receiptID) : @Model</li>
            </ul>
        </fieldset>
    </div>
</body>
</html>

② requestVerifyAuth 함수 호출에 대해 예외가 발생 했을때 오류코드와 메시지를 확인하기 위한 /Views/Shared/Exception.cshtml 파일을 추가합니다.

@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>kakaocert .NET Core Example</title>
</head>
<body>
    <p>Response</p>
    <div>
        <fieldset>
            <legend>kakaocert API 오류</legend>
            <ul>
                <li>code (오류코드) : @Model.code</li>
                <li>Message (오류메시지) : @Model.Message</li>
            </ul>
        </fieldset>
    </div>
</body>
</html>

③ 웹브라우저 페이지를 호출하여 함수호출 결과를 확인합니다.

requestVerifyAuth 응답 결과 예시 화면

기술지원센터

kakaoCert 기술지원은 유선, 메일, 원격지원 등 다양한 채널을 통해 제공됩니다.
T. 1600-9854E. code@linkhub.co.kr