프로젝트 소개
泠 Yggdrasil은 Minecraft를 위한 Yggdrasil 외부 인증 시스템으로, authlib 체계와 완전히 호환되며 계정 등록, 로그인, 캐릭터 관리 및 스킨/망토 호스팅 기능을 제공합니다. 내장된 웹 설치 마법사, 2차원 스타일의 관리 패널과 다층 보안 체계를 통해 몇 분 안에 안전하고 보기 좋은 외부 로그인 서비스를 구축할 수 있습니다.
## 빠른 시작
환경 요구 사항: Java 25(권장, 이론적으로 Java 21+ 지원), 최소 512MB 사용 가능 메모리 권장.
3단계 시작:
1. Java 버전 확인
2. LingYggdrasil-2.2.7.jar 다운로드 후 독립된 빈 디렉토리에 배치
3. 시작(해당 디렉토리가 데이터 디렉토리가 됨)
첫 시작 시 자동으로 설치 마법사(`http://<서버 주소>:35598`)가 실행되며, 안내에 따라 관리자 계정, 데이터베이스 및 이메일 구성을 완료하면 됩니다. 설치 완료 후 프로그램은 세 가지 서비스를 동시에 제공합니다:
| 포트 | 용도 | 접근 범위 |
|------|------|----------|
| 35565 | 사용자 측(등록, 로그인, 대시보드, 스킨, 친구 등) | 외부 공개 |
| 35577 | Yggdrasil API(Minecraft 런처 호출용) | 외부 공개 |
| 35599 | 관리 백엔드 | 비공개 유지 |
| 35598 | 설치 마법사 | 최초 설치 시에만 개방 |
## 기능 특성
### 즉시 사용 가능
- 웹 설치 마법사: 첫 시작 시 관리자 계정, 데이터베이스 및 메일 서비스 설정 자동 안내
- 다중 데이터베이스 지원: SQLite, MySQL, PostgreSQL
- 단일 JAR 배포: 단일 실행 가능한 JAR로 패키징
### 플러그인 시스템
- 외부 플러그인 로드: 시작 시 `plugins/` 디렉토리를 자동 스캔하여 플러그인 jar 로드
- `plugin.yml` 설명: Paper 스타일 모방, 이름, 버전, 작성자, 의존성, 아이콘 및 권한 노드 선언
- 백엔드 플러그인 관리: 수동 시작/중지 지원
- 플러그인 2차 메뉴: 플러그인은 최대 하나의 백엔드 2차 메뉴에 등록 가능
- 동적 권한 노드: 내장 노드와 플러그인 노드가 소스에서 동적으로 통합 등록
- 플러그인 개발 API: 빌드 시 `LingYggdrasil-plugin-api-2.2.7.jar` 동시 생성
### 보안 체계
- Argon2 비밀번호 암호화: 6단계 강도 조절 가능
- 이메일 검증: 도메인 화이트/블랙리스트 제어 지원
- 동일 IP 등록 제한: 대량 등록 방지
- 이름 블랙리스트: 와일드카드 지원
- 독립 세션 체계: 사용자 측, 관리자 측, API가 상호 격리된 세션 쿠키 사용
- Root 무결성 보호: `root_info` 테이블 검증
- 로그인 및 작업 속도 제한: 주요 작업에 빈도 제한 적용
### 사용자 측
- 캐릭터 관리: 여러 게임 캐릭터 생성, 각 캐릭터는 독립적인 Yggdrasil 토큰과 UUID 보유
- 스킨 & 망토: 개인 스킨 및 망토 업로드, 관리, 별칭 명명, 공개/비공개 제어 지원
- 텍스처 라이브러리: 공개 텍스처 광장, 인기순 정렬, 무한 스크롤 지연 로딩
- 좋아요 & 즐겨찾기: 텍스처에 좋아요를 눌러 인기 상승 지원
- 공유 텍스처: 친구 공유와 내 즐겨찾기 두 섹션
- 친구 시스템: 친구 코드 추가, 친구 상세 카드, 차단 관리, 체크 방식 텍스처 공유
- 3D 스킨 미리보기: skinview3d 통합, 360° 회전 미리보기 지원
- 보안 설정: 비밀번호, 이메일, 닉네임 자가 수정, 토큰 조회 및 재생성
- 작업 로그: 자신의 작업 로그 조회, 다운로드 및 삭제
- 테마 및 언어: 라이트/다크 테마 전환, 10개 언어 계정별 영구 저장
### 관리 백엔드
- 대시보드 개요: 사용자 수, 캐릭터 수, 스킨/망토 수 등 핵심 데이터, 구성 요소 드래그 앤 드롭 정렬 지원
- 사용자 관리: 사용자 조회, 검색, 생성, 편집, 차단
- 캐릭터 관리: 전역 CRUD, 이름 수정, 소유권 이전 및 형태 전환 지원
- 스킨 & 망토 관리: 텍스처 리소스 전역 관리, 업로드 크기, 수량, 저장 경로 및 빈도 제한 구성
- 보안 설정: 6단계 암호화 등급 시각화 카드
- 시스템 관리: 사이트 정보, 기능 스위치, 도메인, 공지, ICP 등록, 작업 로그 등 그룹 구성
- 권한 그룹: 관리자 권한 그룹과 사용자 권한 그룹, 메뉴 가시성 및 기능 사용 가능 여부 세밀 제어
- 세계수 설정: 서명 알고리즘, 토큰 유효 기간, 빈도 제한, UUID 버전 등 프로토콜 구성
### Yggdrasil 프로토콜
- 완전한 프로토콜 구현: 주류 Minecraft 런처의 Yggdrasil 인증 연동 호환
- 세 가지 서명 모드: Ed448(현대), RSA-SHA512, RSA-SHA1(호환)
- 토큰 체계: 각 캐릭터에 64비트 고강도 토큰 자동 생성
- 텍스처 호스팅: `/textures/{type}/{hash}` 엔드포인트 공개 노출
- 세션 관리: 완전한 로그인, 로그아웃 및 세션 검증 흐름
- 편의 조회 확장: 이름별 조회, 일괄 조회 등 확장 엔드포인트 제공
### 국제화
간체 중국어, 번체 중국어, 중국어(華夏), English, Русский, Deutsch, Français, Italiano, 日本語, 한국어 총 10개 언어 내장. 언어 팩은 JSON 형식이며 외부 덮어쓰기 및 심층 병합을 지원합니다.
## 클라이언트 연동
HMCL 등 사용자 정의 Yggdrasil을 지원하는 런처를 예로 들면:
1. 런처의 '계정' 또는 '로그인 방식' 설정에서 '사용자 정의 Yggdrasil / 외부 로그인' 선택
2. 인증 서버 주소에 API 루트 주소 입력(예: `https://example.com`, 직접 연결 시 `http://<IP>:35577`)
3. 사용자 이름에 캐릭터 이름, 비밀번호에 해당 캐릭터의 Yggdrasil 토큰 입력
## 기술 스택
| 구성 요소 | 기술 |
|------|------|
| 언어 | Java 25 |
| 웹 프레임워크 | Javalin |
| 데이터베이스 연결 | HikariCP 연결 풀 |
| 데이터베이스 | SQLite / MySQL / PostgreSQL |
| 암호화 | Bouncy Castle(Argon2, Ed448, RSA) |
| 메일 | Eclipse Angus Mail |
| 로깅 | Logback + SLF4J |
| 직렬화 | Jackson |
| 빌드 도구 | Maven |
## 라이선스
이 프로젝트는 GNU Affero General Public License v3.0 라이선스를 사용합니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.