Skip to content

SoTree17/secureQR-server-example

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

52 Commits
 
 
 
 
 
 
 
 

Repository files navigation

secureQR-server-example

secureQR-module 라이브러리를 적용한 보안 QR api 서버 적용 예시

Description

  • 앞서 개발한 secureQR-module 라이브러리를 적용한 REST API 서버로의 적용 예시
  • 암호화 QR의 암호화 방식 추가, 암호화 QR 생성, 암호화 QR 인증 및 결과 반환의 역할을 수행하는 예시를 작성함.

Implementing Environment

  • 다음과 같은 개발 환경에 secureQR-module 라이브러리 적용함.
        개발 언어 : JAVA11 & JAVA
        개발 환경 : Springboot & Springboot

- 이외에도 자바를 사용하는 서버라면 라이브러리를 추가함으로써 적용이 가능

Build

How to run on local?

  • 로컬 환경에서는 클라이언트와 통신하기 힘듬을 주의
  • 자바11 이 설치 되어 있어야 함
  1. 동봉한 jar 파일을 다운로드 받음
  2. cmd 나 터미널을 실행
  3. 해당 jar파일 디렉토리로 이동
  4. 다음과 명령어를 입력하여 배포 파일 실행
    java -jar secureQR-0.0.1-SNAPSHOT.jar

How to run in IntelliJ?

  1. 프로젝트를 다운받고 IntelliJ 프로젝트로 로드
  2. InteliJ의 Gradle탭에서 Build 함.
  3. secureQR/src/main/java/com/secureQR/SecureQrApplication.java 를 실행하여 로컬 환경에서 테스트 가능

How to run on server?

  • 리눅스 기반 서버 환경에서 해당 레파지토리의 파일을 실행한다고 가정
  • 현재 아마존 웹 호스팅 AWS에서 AMI2 가상 머신을 활용
  1. 자바와 GIT 설치
sudo yum install java-11-openjdk-devel
sudo yum install git
  1. 해당 서버의 시간대를 서비스 환경에 맞게 설정
sudo rm /etc/localtime
sudo ln –s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
  1. 해당 레파지토리를 다운받을 디렉토리 생성
mkdir ~/app && mkdir ~/app/QrServer
  1. 해당 디렉토리로 이동
cd ~/app/QrServer
  1. git clone 명령어를 통해 해당 레파지토리 주소를 이용하여 다운 받음
git clone https://github.com/SoTree17/secureQR-server-example.git
  1. gradle bootjar 도구를 통해 jar파일로 생성
./gradlew bootjar 

  - ./gradlew 권한 오류시 아래 명령어 입력

chmod +x ./gradlew
  1. 빌드된 실행파일 경로로 이동 후, 실행
cd build/libs
nohup java -Djava.net.preferIPv4Stack=true -jar secureQR-0.0.1-SNAPSHOT.jar & 
java -jar secureQR-0.0.1-SNAPSHOT.jar 
  • 백그라운드로 계속 실행할 때, nohup 명령어 이용하여 실행
  • 일반적으로 테스트할때, java 명령어 이용하여 실행
  1. 실행 종료시
 CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)
 kill -TERM CURRENT_PID

API

API 사용법

로컬에서 서버 실행시 http://127.0.0.1:8080/api/v1/secureQR 기준 addCrypto -> generator -> authQR 순서로 실행

Method : POST , /addCrypto

  • 서버에 해시함수 방식, 암호화/복호화 방식에 대해 설정하는 API 요청 해당 API를 아무나 요청하면 안되기 때문에 현재는 HTTP BODY 에 "token" : "value" 형식으로 접근하도록 설정되어있음.

☁️ 서비스에 적합하게 JWT 적용, 또는 Spring Security 적용등이 가능

  • 예시
    아래와 같은 요청으로 암호화 방식 추가 가능
    현재 예시에서는 (crypto 0: AES256, 1: RSA), (hash 0: MD5, 1:SHA256)

요청 URL : http://127.0.0.1:8080/api/v1/secureQR/addCrypto

{ "crypto" : 0, "hash" : 0, "token" : "SOTREE17_SERVER_REQUEST" }

Method : POST , /generator

  • 클라이언트로부터 secureQR이미지 생성 요청을 처리하는 API 예제.
  • 현재 예제에서는 보안 QR코드 이미지의 byte array를 BASE64로 인코딩한 문자열 형태로 응답 공소 레포트 준비

- 예시 아래와 같은 요청으로 secureQR 생성

요청 URL : http://127.0.0.1:8080/api/v1/secureQR/generator

{ "authUrl" : "https://myserver.com", "c_index": 0, "data" : "https://github.com/SoTree17/secureQR-server-example", "width" : 250, "height" : 250 }

응답 : {"binary":"iVBORw0KGgoAAAAN... }

  • 응답을 BASE64로 디코딩 한 뒤에 secureQR-module 속 qr.Generator의 createSecureQRImage 메소드로 바이트 코드를 QR코드 이미지로 변환 가능

Method : POST, /authQR

  • 안드로이드 앱 클라이언트가 특정 QR 이미지를 읽은 데이터를 HTTP BODY에 담아 보내면,
  • 해당 서버에서 본 프로젝트에서 제공하는 secureQR 인지 아닌지를 판단하고,
  • secureQR이라면 QR코드의 데이터를 복호화하여 응답하는 API 요청

- 예시 아래와 같은 요청으로 읽은 데이터를 검증하고 복호화 된 값을 얻음

요청 URL : http://127.0.0.1:8080/api/v1/secureQR/authQR

{ "c_index": 0, "d_index": 0, "data": "4qbDZ2w3cSENWZPvPlgsBIeIGXA1xLRnvqVg0BTjnmVDiIIBxGK6HixygLyWOP3cJXH9aTQU7pqDbXKgqfSoueDvD/KVEoxKWLO2J/WrzXlkSrD23D5CV32kxSS5HGyp" }

응답 : { "resURL": "https://github.com/SoTree17/secureQR-server-example" }

  • 보안 QR코드가 올바르다면 원본 데이터를 응답으로 보내준다.

Open Source Lisence

Copyright

Component Version Homepage License
Zxing 3.4.1 https://github.com/zxing/zxing Apache-2.0 License
Gson 2.8.8 https://github.com/google/gson Apache-2.0 License
Okhttp 3.12.2 https://square.github.io/okhttp/ Apache-2.0 License
Converter-gson 2.9.0 https://github.com/square/retrofit Apache-2.0 License
Converter-jackson 2.9.0 https://github.com/square/retrofit Apache-2.0 License
Retrofit2 2.9.0 https://github.com/square/retrofit Apache-2.0 License
Spring-boot-starter-web 2.5.3 https://spring.io/projects/spring-boot Apache-2.0 License
Junit 4.13.2 https://junit.org/junit4 Eclipse Public License 1.0

About

API 서버 예제

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages