웹사이트에서 Millida로 로그인
“Login with Millida” 버튼을 연결하는 방법을 알아보세요 — 웹사이트 방문자를 위한 Millida 계정 로그인. 애플리케이션 등록, 인증 흐름, 토큰 검증.
업데이트 2026년 9월 7일
Millida는 아이덴티티 제공자 역할을 할 수 있어요. 방문자가 여러분의 사이트에서 “Millida로 로그인”을 클릭하고, 데이터 전송에 동의한 뒤, 이미 인증된 상태로 돌아옵니다. Google, Apple, Discord로 로그인하는 것과 똑같이 OpenID Connect로 동작하므로, 이미 만들어진 OIDC 라이브러리라면 무엇이든 사용할 수 있어요.
노출되는 것은 아이덴티티뿐이에요. Minecraft 닉네임, 이름, 아바타, 그리고 여러분이 요청하고 본인이 동의한 경우에 한해 이메일, 스킨, 연동된 Discord와 Telegram, 플랫폼에서의 평판이 포함됩니다. 잔액, 거래, 서버는 애플리케이션에서 사용할 수 없어요.
해야 할 일
1. 애플리케이션 만들기
프로필 → API 및 웹훅 → Millida로 로그인 탭 → “애플리케이션 만들기”.
필요한 항목은 다음과 같아요.
- 이름 — 사용자가 로그인 화면에서 보게 됩니다. 다른 사람의 애플리케이션 이름에는 “Millida”라는 단어를 사용할 수 없어요.
- 리디렉션 URI — 사용자가 확인 후 돌아올 주소입니다.
https만 가능해요(개발용으로는http://localhost가 허용됩니다). 전체 문자열로 대조하므로, 슬래시가 하나 더 붙거나 파라미터가 추가되면 일치하지 않아요. - 개인정보 처리방침 링크 — 사용자가 데이터를 여러분에게 넘기기 전에 보게 됩니다.
생성을 마치면 client_id를 받고, 서버 애플리케이션이라면 client_secret도 받아요. 시크릿은 한 번만 표시되므로 즉시 저장하세요.
애플리케이션 유형은 시크릿을 보관할 백엔드가 있다면 server, SPA나 모바일 애플리케이션이라 시크릿을 숨길 곳이 없다면 public입니다.
2. 라이브러리에 제공자 URL 지정하기
https://id.millida.net
이것으로 충분해요. 라이브러리가 https://id.millida.net/.well-known/openid-configuration을 직접 읽고 나머지 URL을 찾아냅니다.
3. 사용자를 로그인으로 보내기
https://id.millida.net/oauth/authorize
?response_type=code
&client_id=your_client_id
&redirect_uri=https://your-site.ru/auth/millida/callback
&scope=openid profile email
&state=random_string
&nonce=random_string
&code_challenge=base64url(sha256(code_verifier))
&code_challenge_method=S256
PKCE는 서버 애플리케이션을 포함해 모든 경우에 필수예요. state를 세션에 저장하고 돌아왔을 때 검증하세요. 이게 없으면 다른 사람의 응답이 여러분의 세션에 주입될 수 있어요.
4. 코드를 토큰으로 교환하기
POST https://id.millida.net/oauth/token
Content-Type: application/x-www-form-urlencoded
Authorization: Basic base64(client_id:client_secret)
grant_type=authorization_code&code=…&redirect_uri=…&code_verifier=…
응답에는 access_token, id_token이 들어 있고, offline_access를 요청했다면 refresh_token도 포함돼요.
5. 누가 로그인했는지 확인하기
id_token을 파싱하거나(JWKS로 서명을 검증하고 iss, aud, exp, nonce를 확인하세요) 다음을 요청하세요.
GET https://id.millida.net/oauth/userinfo
Authorization: Bearer <access_token>
요청할 수 있는 데이터
| 요청하는 것 | 받는 것 |
|---|---|
openid | sub — 사용자 식별자, 필수 |
profile | 닉네임, 이름, 아바타, 프로필 링크 |
email | 이메일 주소와 인증 여부 |
minecraft | Minecraft 닉네임, UUID, 에디션, 현재 스킨과 망토 링크 |
discord | 연동된 Discord의 식별자와 이름 |
telegram | 연동된 Telegram의 식별자와 @이름 |
reputation | 프로필 좋아요, 업적 수, 가입일, 계정 인증 표시 |
offline_access | 사용자가 권한을 취소할 때까지 액세스를 갱신할 권리 |
오프라인 계정에는 UUID가 없어요. minecraft_uuid는 비어 있고, minecraft_username은 계정 정보로 채워집니다. telegram_id는 문자열로 전달돼요. Telegram 채팅 id는 JSON의 정확한 숫자 범위에 들어가지 않으며, 숫자로 파싱하면 마지막 자릿수가 손상됩니다.
로그인이 동작하는 데 필요한 것만 요청하세요. 사용자는 동의 화면에서 추가 항목 하나하나를 읽고 그 자리에서 마음을 바꿀 수도 있어요.
사용자 식별자에 대하여
sub는 같은 사람이라도 애플리케이션마다 다릅니다. 여러분의 사이트에서는 변하지 않지만, 다른 사이트의 sub와 일치하지 않으므로 애플리케이션 간에 사용자를 대조할 수 없어요.
sub를 사용자 키로 저장하세요. 이메일은 변경될 수 있어서 적합하지 않아요.
애플리케이션 검증
새 애플리케이션은 즉시 동작하지만, 로그인 화면에 미검증으로 표시돼요. 사이트가 준비되면 대시보드에서 “검토 요청”을 클릭하세요. 저희가 확인하고 표시를 제거해 드릴게요.
자주 발생하는 오류
“redirect_uri does not match any registered address” — 주소는 전체 문자열로 대조해요. 끝의 슬래시, 스킴, 포트를 확인하세요.
“Only code_challenge_method=S256 is supported” — PKCE는 필수이며, plain은 허용되지 않아요.
“The authorization code has already been used” — 코드는 일회용이고 1분 동안만 유효해요. 반복 교환은 유출로 간주되어 애플리케이션의 액세스가 전부 취소됩니다.
취소 후 토큰이 동작하지 않음 — 사용자가 프로필 보안 설정에서 애플리케이션을 비활성화한 거예요. 정상적인 동작이니 다시 로그인하도록 안내하세요.
사용자가 액세스를 취소하는 방법
프로필 → 보안 → “연결된 애플리케이션” → “취소”. 액세스는 즉시 중단되고 발급된 모든 토큰이 무효화돼요.