프로젝트 소개

泠 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 라이선스를 사용합니다.