# Issuer 개발 가이드

Issuer는 credential을 발급합니다. 본격적으로 개발을 시작하기 전에 issuer는 credential data model에 대한 이해가 필요합니다.
Verifiable Credential Data Model 문서의 내용을 먼저 보시기를 권장합니다.

# DID, private/public key 생성

다른 entity(holder, verifier)가 issuer를 식별하기 위한 DID를 생성하고, 이를 verifiable credential에 넣어야 합니다. 또한 이 DID를 생성하고, verifiable credential에 서명을 추가하기 위해서 PKI기반의 private key, public key가 필요합니다.
DID 및 private/public key 쌍을 생성하기 위하여 DID Tool 문서를 참고하세요. 생성한 DID와 private key를 분실했을 경우, 복구할 수 없기 때문에 분실하지 않도록 주의해야 합니다.

# Credential 발급

Issuer는 credential을 발급하는 서버(WAS), holder와의 통신과 사용자 UI를 담당하는 Web App을 만드는 것으로 credential을 발급할 수 있습니다.

# Sequence Diagram

아래 diagram은 Web App을 통해 credential을 발급하는 전형적인 시나리오 예시입니다.
구체적인 예제를 통해서 이해를 돕고자 하는 것이니, 아래 diagram의 API나 절차를 반드시 지킬 필요는 없습니다.

  • Holder인 쯩 앱과 issuer 웹 앱간의 통신은 MyID Web Client SDK를 이용합니다.
  • Issuer WAS 에서 아래 예제의 "jwt": { } 부분은 MyID JAVA SDK를 이용해서 만들 수 있습니다.
  • Issuer WAS 와 issuer 웹 앱간의 통신은 이 문서의 범위가 아닙니다.
  • 각 entity간 통신 시 메시지와 그 결과에 대한 설명은 결과에 대한 code는 이 문서의 Appendix 쯩 앱과의 메시지 규격를 참고하십시오.

image alt text

# Implementation

Credential 발급하기 위해서 아래와 같은 사항들을 처리해야 합니다.
개발과 관련된 내용을 이해하기 위해서 Server Implementation Guide를 참고하십시오.

# DID init을 만들어서 Holder에게 전달

DID init message를 만들기 위해 서버 개발 가이드의 DID init을 참고 하십시오. Issuer 웹 앱은 서버에서 수신한 DID init message를 쯩 앱으로 전달합니다.
해당 처리는 Client Guide Web 에서 아래 내용을 참고하십시오.

  • Implementation → Zzeung → static request()

# DID auth를 수신

Issuer 웹 앱은 쯩 앱으로 부터 DID auth message를 수신합니다.
해당 처리는 Client GUide Web에서 아래 내용을 참고하십시오.

  • Implementation → Zzeung → static request()

이후 message를 issuer 서버로 전송합니다.
Issuer 서버에서 DID auth message 처리는 서버 개발 가이드의 Verify DID auth을 참고 하십시오.

# Credential 생성하기

서버 개발 가이드의 Create Credential을 참고 하십시오.

# Credential 블록체인에 등록하기

서버 개발 가이드의 Register Credential을 참고 하십시오.

# 쯩 앱에게 Credential 전달하기

만들어진 credential을 holder에게 전달합니다. 해당 처리는 Client Guide Web에서 아래 내용을 참고하십시오.

  • Implementation → Zzeung → static request()

Issuer 서버에서 만들어진 credential을 issuer 웹 앱이 받아서 쯩 앱으로 전달 합니다.

# Credential 발급 결과 확인 하기

쯩 앱은 전달 받은 credential의 저장 결과를 issuer 웹 앱으로 전달합니다. Issuer는 이 결과를 이용해서 어떤 처리를 할 수 있지만, 이 부분은 필수 구현 사항은 아닙니다.