VLGG 가 Riot API 를 사용하는 방식
Riot API 심사를 위해, 그리고 동일한 정보를 알고 싶은 사용자들을 위해 어떤 데이터를 어떻게 요청하고 어떻게 다루는지 모두 기록합니다.
1. VLGG 란?
VLGG 는 VALORANT 플레이어가 본인 매치에 대한 자세한 분석을 볼 수 있는 iOS 앱입니다. Riot Sign On (RSO) 으로 로그인하면 Riot 공식 Public API 를 통해 본인 매치 이력을 조회하고, 게임 내 스코어보드에서는 볼 수 없는 라운드별·사이드별·무기별 분석을 보여줍니다. 본인 외 다른 플레이어의 데이터는 일체 표시하지 않습니다.
2. 사용 중인 Riot Public API
- ACCOUNT-V1 — 로그인 사용자의 PUUID 와 Riot ID (gameName#tagLine) 조회.
- VAL-MATCH-V1 — 사용자의 매치 리스트 및 개별 매치 상세 조회.
- VAL-RANKED-V1 — 공개 경쟁전 리더보드.
- VAL-CONTENT-V1 — 정적 메타데이터 (에이전트, 맵, 시즌).
- VAL-STATUS-V1 — 게임 서비스 상태.
3. 데이터 흐름
- 사용자가 iOS 앱에서 “Riot 으로 로그인” 을 탭합니다.
- 앱이
ASWebAuthenticationSession으로auth.riotgames.com을 엽니다. - Riot 이
https://api.vlgg.net/auth/rso/callback의 Cloudflare Worker 콜백으로 리다이렉트합니다. - Worker 가 OAuth 코드를 토큰으로 서버 측에서 교환합니다. Riot client secret 은 디바이스에 노출되지 않습니다.
- Worker 가 사용자의 PUUID, Riot ID, 활성 VAL shard 를 조회합니다.
- Worker 가 자체 7일 JWT 를 발급하고, iOS 앱은 이를 iOS Keychain 에 저장합니다.
- 이후 요청은 JWT 를 사용해
/me/matches,/me/matches/:id,/public/leaderboard를 호출합니다. - Worker 는 사용자의 RSO refresh token (AES-GCM 으로 저장 시 암호화) 으로 사용자를 대신해 Riot Public API 를 호출합니다.
4. 정책 준수
- 정찰 금지. 앱에서 임의의 플레이어를 검색할 수 없습니다. 로그인 본인 매치만 표시합니다.
- 실시간 우위 없음. 라이브 인게임 데이터를 노출하지 않습니다. 종료된 매치 이력만 보여줍니다.
- 게임 내 오버레이 없음. 독립 iOS 앱이며 오버레이·자동화·게임 클라이언트 통합이 없습니다.
- RSO opt-in only. 사용자가 Riot Sign On 으로 명시 동의해야 사용자 기능에 접근할 수 있습니다. 동의 없으면 공개 리더보드만 보입니다.
- 제3자 판매 없음. Firebase (익명 크래시·분석) 와 AdMob (ATT 동의 시 IDFA) 외 어떤 제3자에게도 Riot 데이터를 판매·공유하지 않습니다.
5. 보안
- RSO refresh token 은 Cloudflare D1 에 AES-GCM (256-bit) 으로 암호화 저장됩니다.
- OAuth 코드↔토큰 교환은 서버에서 수행됩니다. Riot
client_secret은 iOS 앱에 임베드되지 않습니다. - 자체 세션 토큰은 HS256 으로 서명되며 7일 후 만료, 폐기 가능합니다.
- iOS 앱은 세션 JWT 를 iOS Keychain (
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly) 에 저장합니다. - Riot 리다이렉트는 커스텀 URL scheme 이 아닌 Universal Links 를 사용해 콜백 가로채기를 방지합니다.
- 사용자별 rate limit 을 서버에서 적용합니다.
- 로그에는 PUUID 의 SHA-256 해시 앞 8자리만 기록합니다.
6. 데이터 보관·삭제
- Riot 에서 가져온 매치 데이터는 D1 에 캐시되며 immutable 로 취급합니다 (매치는 종료 후 변하지 않음).
- 로그아웃 시 refresh token 은 삭제되고 세션 토큰은 폐기됩니다.
- 사용자는 언제든 soopoly.dev@gmail.com 으로 데이터 전체 삭제를 요청할 수 있으며 24시간 내 처리됩니다.
7. 개발자
- 개발자: soopoly
- 이메일: soopoly.dev@gmail.com
- 웹사이트: https://vlgg.net
- API 키 보유자: 동일 개발자. Production Key 도 동일 명의로 신청.