Coder Social home page Coder Social logo

codestates / didnow Goto Github PK

View Code? Open in Web Editor NEW
10.0 6.0 5.0 23.5 MB

퍼블릭 블록체인 네트워크를 이용한 DID 기반 인증서 관리 플랫폼

Home Page: https://didnow.cf

Shell 0.06% JavaScript 62.74% Dockerfile 0.29% HTML 17.45% CSS 5.24% Solidity 14.23%
ec2 klaytn nodejs react solidity

didnow's Introduction

DIDNOW

GitHub language count GitHub language count GitHub contributors GitHub stars GitHub forks GitHub license
GitHub license GitHub license GitHub license

🚀 배포링크 : https://didnow.cf/

🎥 발표영상 : https://youtu.be/G_nWCWi55kE

📚 목차

📖 프로젝트 소개

프로젝트 개요

인증서 발급 기관은 많은 유저의 인증서를 직접 발급해줘야 하고, 유저가 인증서를 재요청하는 경우 복잡한 행정절차를 따라야 했다. 인증서를 발급받은 유저는 인증서를 직접 관리해야 했고, 인증서를 검증하는 기관은 인증서의 위,변조 여부를 정확히 판별할 수 있는 방법이 없었다. 이러한 사회적 문제를 해결하기 위해 우리는 블록체인을 활용한 인증서 관리 플랫폼 DIDNOW를 개발하였다.

프로젝트 요약

  • 위,변조 불가능한 인증서
  • 인증서 통합 관리 서비스

프로젝트 플로우차트

DB 스키마

🔧 사용 기술 (Technique)

🔨기술 스택 (Technique Used)

FrontEnd

Icon Stack Description
REACT 프론트앤드 구성
ANTD 컴포넌트 UI
TAILWIND 컴포넌트 UI
THREEJS 런칭 페이지

BackEnd

Icon Stack Description
NODEJS API 서버 4대 제작
MONGODB MongoDB Atlas M0 사용
NGINX Load Balancing과 static 파일 반환 웹 서버로 사용
ARTILLERY HTTP 프로토콜 부하 테스트 진행시 사용
MOCHA Unit Test에 사용
CHAI Unit Test Assert Library 사용

Smart Contract

Icon Stack Description
SOLIDITY 스마트 컨트랙트 작성
TRUFFLE 스마트 컨트랙트 배포
KLAYTN 블록체인 네트워크
KLIP 지갑 연동
GANACHE 로컬에서 테스트

Deploy

Icon Stack Description
DOCKER 컨테이너 생성, 배포 시 이미지 생성
EC2 배포 서버
ROUTE 53 DNS와 EC2서버 연결
CERTIFICATE MANAGER SSL 인증서 생성
GITHUB ACTIONS CI/CI 배포 자동화 사용

🚧Architecture

  1. Docker를 사용하여 Proxy, Front, Back을 따로 빌드하고 실행. 이 때 Front는 react를 빌드하여 생성된 html파일을 NginX에 담아 빌드하여 메모리를 절약한다.
  2. Proxy를 구성하고 있는 NginX는 URL로 접속한 유저를 Front로 링크해주고 Front에서 발생한 API Request를 적절한 Back 서버 중 트래픽이 가장 적은 서버로 연결시킨다.
  3. Back 서버는 요청에 따라 Klaytn 네트워크와 MongoDB를 호출하여 기능을 실행한다.

🌏Network

Deploy 🚀

  1. 개발자가 지정된 Repository의 지정된 Branch에 Push하면 GuthubAction이 실행되어 Docker파일로 빌드하고 DockerHub에 Push한다.
  2. 그 후 GithubAction은 EC2에서 실행중인 Runner를 호출해 DockerHub에서 이미지를 Pull하고 실행한다.

Connect

  1. 유저가 URL에 접속하면 AWS Route53을 통해 해당 도메인이 EC2인스턴스와 연결된다.
  2. Certificate Manager에서 발급된 인증서를 이용해 해당 도메인 주소에 대한 SSL 인증을 확인하고 https 연결을 승인한다.

퍼블릭 블록체인을 활용한 DID

DID란?

Decentralized Identity(탈중앙 신원증명, DID)는 데이터의 주권을 개개인에게 부여하고 중앙화된 제3자를 거치지 않고 인증에 성공할 수 있는 차세대 인증 방식입니다.

Why public Blockchain?

  • DID를 구현한 대부분의 서비스들은 컨소시엄 블록체인을 사용합니다.
  • 하지만 위의 경우 중앙화된 네트워크로 100% 분산화된 블록체인이라고 할 수는 없습니다.
  • 중앙화된 블록체인은 결국 소수의 권력자에 의해 데이터 위변조의 위험이 도사리고 있습니다.
  • DIDNOW는 위임 지분 증명(DPoS)를 사용한 Klaytn public Blockchain을 활용한 DID 서비스를 구현함으로써 100% 탈중앙화된 블록체인 위에서 작동합니다.

Flowchart

VP 검증과정

1. Holder의 디지털 서명 확인

2. Issuer의 디지털 서명 복호화

3. Issuer DID Document에서 Holder ID 확인

4. Verifier가 검증할 인증서의 종류 확인

💾 설치 & 시작 안내 (Installation Process & Getting Start)

1. FE .env 설정

FE/client/.env.development내용을 그대로 복사해 .env를 생성한다.

2. BE .env 설정

BE/01_AUTH-server/.env.example, BE/02_ISSUER-server/.env.example, BE/03_HOLDER-server/.env.example, BE/04_VERIFIER-server/.env.example를 참고해 각각 .env파일을 생성한다.

3. default.conf 생성

$IP에 자신이 접속한 IP를 입력하여 default.conf 파일을 생성합니다.

cd Proxy
echo url=$IP | cat - githubaction > githubaction.sh
chmod 777 githubaction.sh
./githubaction.sh
rm ./githubaction.sh
cd ..

4. docker-compose 실행

docker-compose파일을 실행하여 localhost:80에 접속하여 테스트해볼 수 있습니다.

docker-compose up -d

💻 제공 기능 (Service)

Common

회원가입

Holder

인증서 발급 인증서 다운로드
인증서 제출 인증서 제출 목록

Issuer

인증서 제작 인증서 지급

Verifier

인증서 검증

👪 팀 정보 (Team Information)

(팀원 정렬 순서는 이름순입니다.)
name role GitHub
안병현 Front-end
오동재 SmartContract
허윤석 Back-end

didnow's People

Contributors

donggni0712 avatar planethoon avatar qudgus9601 avatar toismfer avatar ysheokorea avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

didnow's Issues

Web Socket 적용 검토

  1. Holder가 VC 요청하는 page
  2. Holder가 Verifier에게 인증 요청할 때
  • WS 코드 작성
  • WS 적용 후 부하 테스트

Figma WireFrame 작성하기

  • VC 요청시 필요한 화면
  • VP 요청 시 필요한 화면
  • Holder, Verifier, Issuer 마다 필요한 화면
  • 전체적인 프로젝트 WireFrame 재구성

FE - 해야될 모든것

Common

  • 로그인
  • 로그인 - UI
  • 로그인 - API
  • 로그인 - validate
  • 회원가입
  • 회원가입 - UI
  • 회원가입 - API
  • 회원가입 - validate
  • 상단 메뉴
  • 상단 메뉴 - UI
  • 상단 메뉴 - 로고
  • 상단 메뉴 - 로그인 시 UI 변경
  • 상단 메뉴 - 이름 클릭시 메뉴
  • 상단 메뉴 - 이름 클릭시 메뉴 UI
  • 하단
  • 하단 - UI
  • 하단 - 로고
  • 하단 - 각 버튼 기능
  • 하단 - 팀 버튼 클릭 시 팀원들 github 정보 받아오기 API ( Advanced )

Issuer

  • Home 찬우님이 작업중
  • 인증서 등록
  • 인증서 등록 - UI
  • 인증서 등록 - 제출 버튼 API 연동
  • 인증 목록 등록
  • 인증 목록 등록 - UI
  • 인증 목록 등록 - 칼럼 추가 제거 기능
  • 인증 목록 등록 - 등록하기 버튼 API 연동
  • 인증 목록 등록 - 등록된 유저 목록 가져오기 API 연동
  • 인증 목록 등록 - 유저 등록 칼럼 - 성인여부 true false 선택 가능하도록
  • 인증 목록 등록 - 유정 등록 칼럼 - 인증 일자 DatePicker 사용하도록 ( Advanced )
  • 인증 목록 등록 - 유저 등록 시 input 전부 초기화
  • 정보 수정
  • 정보 수정 - UI
  • 정보 수정 - 정보 수정 버튼 API 연동

Holder

  • Home 찬우님이 작업중
  • 인증서 목록
  • 인증서 목록 - UI
  • 인증서 목록 - 인증서 목록 API 연동
  • 인증서 목록 - 인증서 갯수 카운팅
  • 인증서 목록 - PDF 보기
  • 인증서 목록 - PDF 다운로드 ( 모듈 작성 완료, 적용 X )
  • 인증서 목록 - 목록 선택 기능
  • 인증서 목록 - 선택된 목록 제출
  • 인증서 목록 - 특정 인증서 삭제
  • Issuer 목록
  • Issuer 목록 - UI
  • Issuer 목록 - Issuer 목록 API 연동
  • Issuer 목록 - 발급 요청 버튼 클릭 시 Modal
  • Issuer 목록 - Modal - UI
  • Issuer 목록 - Modal - 인증 요청 버튼 클릭 시 동작 ( 팀원들과 상의해 볼 것 )
  • 정보 수정
  • 정보 수정 - UI
  • 정보 수정 - 정보 수정 버튼 API 연동
  • Verifier 목록
  • Verifier 목록 - UI
  • Verifier 목록 - Verifier 목록 API 연동
  • Verifier 목록 - 인증 요청 버튼 클릭 시 Modal
  • Verifier 목록 - Modal - UI
  • Verifier 목록 - Modal - 제출 가능한 VC 목록 API 연동
  • Verifier 목록 - password 검증
  • Verifier 목록 - 검증하기 버튼 클릭 시 기능 ( 팀원들과 상의해 볼 것 )

Verifier

  • Home 찬우님이 작업중
  • VP 목록 - UI
  • VP 목록 - 제출 된 인증서 목록 API
  • 정보 수정
  • 정보 수정 - UI
  • 정보 수정 - 정보 수정 버튼 API 연동

FE - 수정필요

  • common - footer - team github
  • make components - Not Found
  • holder - manage - modal 창 띄우고 바로 인증서 제출 가능하도록
  • Figma 다시 작성
  • issuer 가 발급 가능한 VC 의 종류가 뭐뭐 있을지 생각해보자
  • verifier - VPList UI
  • issuer - issuer User List UI
내용 holder issuer verifier
UI O O O
API O O O
validate O O O
signin O O O
signup O O O
loading O O O
pagination O O O

Front 요청사항

병현님 프론트에서 요청보내실 때 수정된 부분 Issue sharing 드립니다.

  1. Verifier 회원가입 시 verifyList를 배열로 태워주셔야 됩니다.
  • 저희가 생각한 건, Dropdown 형식으로 verifier가 인증이 필요한 인증서 종류를 프론트에서 배열로 관리해주시고,
  • Dropdown/select 형식으로 지정해서 넣는게 좋을 듯 합니다. 아니면 체크박스 형태로도 괜찮구요,
  • 인증서종류는 [졸업증명서, 출입국증명서, 성인인증서, 수료증, All] 으로 지정해주시면 좋을 듯 합니다.
  1. 위와 같은 개념으로 Issuer가 VC를 발급할 때 VC 타이틀 부분에도 DIDNOW 서비스에서 발급가능한 인증서를 배열로 관리해주시면 좋겠습니다.

또 생각나는거 있으면 다시 말씀드릴게요 ~

Back End Refactoring

  1. Code Refactoring
  • console.log() remove
  • Code refactoring
  1. Issuer가 VC를 미리 발행하는 로직
  • IssuerUserList 등록 할 때 VC를 미리 발행해놓는다.
  • Issuer DID Document 수정
  • Holder 로직 수정
  1. Serial ID 만들기
  • Serial Hash값 Hash(title, name, type)으로 지정
  1. Verifier VerifyList CRUD
  • Verifier VerifyList CRUD

DID 인증로직 변경

  • Issuer VC 발급 로직
  • Holder CreateVerifyRequest 로직
  • Verifier CloseVerifyRequest 로직
  • Generate Key Pairs 로직 수정
  • 컨트랙트 연결 재구성

백엔드 요청사항

  • 특정 유저에 대한 비밀번호 검증 ( accessToken으로 접근 후 password compare 하고 true or false )
  • 모든 holder 에 대한 정보 가져오는 api
  • 특정 이메일을 통해 holder 정보를 가져오는 api
  • issuer의 verifiable credential 을 가져오는 api

FE - 고쳐야될 점

  • 인증서 수혜자 정보 목록 추가 및 삭제 시 삭제가 되지 않는 현상 ( issuerIssue.js )
  • 인증서 제출 페이지에 직접 접근시에 발생하는 오류 ( holderSubmit.js )
  • 파일 업로드 컴포넌트 재작성
  • logo 192 error console
  • antd menu 관련 error console
  • menu item 관련 error console
  • signup UI frame 깨지던 현상

nginX로 로드밸런싱 및 배포

  1. nginX로 로드밸런싱 구현
  2. ssl 인증서 추가
  3. gzip 사용
  4. timeout, buffer 관련 프록시 설정
  5. ec2에 배포
  6. githubAction을 활용하여 배포 자동화

DID Document 포맷

  1. 백엔드에서 만든 PublicKey 항목 추가. 해당 키로 VC를 복호화함

FE - 메인화면 upgrade

  • 3d도형 및 표현하고자 하는 내용 구상하기
  • threeJS 환경 셋업 및 연동하기
  • 3d도형 띄우기
  • 도형에 상호작용 기능 붙이기

Contract Refactoriing And Summary

  1. public 함수 줄이기
  2. 가스비 고려하여 수정
  3. 구조도 간략하게 그리고 README.md에 등록
  4. addService 서버지갑이 아닌 개인지갑으로 하도록 수정

프론트엔드 수정 요청 사항

  1. Nav바 유저의 타입마다 다르게 표시
  2. 이슈어의 페이지 로직, 홀더 페이지 로직, 베리파이어 페이지 로직 나누기.

MSA 적용

MSA(Micro service architecture) 구성

  • Auth
  • Issuer / Verifier / Holder 로직 쪼개기
  • Unit Test
  • Dockerfile 작성
  • Docker Compose 작성

백엔드 수정

  1. 회원가입시 퍼블릭키, 프라이빗 키 생성 및 DB 저장
  2. 퍼블릭키는 DID Document에도 저장
  3. 검증

페이지 UI/UX 구현

  1. 메인 페이지
  2. 로그인 페이지
  3. 회원가입 페이지
  4. Holder 페이지
  5. Issuer 페이지
  6. Verifier 페이지

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.