결론부터
- 1sendCode → signIn(새 번호면 signUp) → 2단계 인증이면 SRP.
- 2코드가 오는 길은 서버가 정한다 — 종류에 맞는 안내를 띄운다.
- 3개발 중엔 시험 서버와 시험 번호로 — 진짜 번호 요청을 아낀다.
로그인은 세 걸음 + 한 걸음
텔레그램 API(사람 계정)의 로그인은 공식 앱이 하는 일과 같습니다. TDLib 을 쓰면 이 순서를 라이브러리가 상태(authorization state)로 알려 주고, 직접 MTProto 를 다루면 아래 메서드를 차례로 부릅니다.
| 걸음 | 메서드 | 하는 일 |
|---|---|---|
| 1. 코드 요청 | auth.sendCode | 전화번호와 api_id·api_hash 를 보낸다. 서버는 코드를 보낸 방법과 phone_code_hash 를 돌려준다 |
| 2. 코드 입력 | auth.signIn | 받은 코드와 phone_code_hash 로 로그인한다 |
| 2-1. 새 번호면 | auth.signUp | 가입이 필요하다는 답이 오면 이름을 받아 가입한다(이용 약관 동의 포함) |
| 3. 2단계 인증 | account.getPassword → auth.checkPassword | SESSION_PASSWORD_NEEDED 가 오면 비밀번호를 SRP 방식으로 확인한다 |
api_id·api_hash 받는 법은 api_id 발급, 갈래 고르기는 API 4가지에 있습니다.
코드는 여러 길로 온다
코드를 어디로 보낼지는 서버가 정하고, 응답의 종류로 알려 줍니다. 화면에는 그 종류에 맞는 안내를 띄워야 사용자가 헤매지 않습니다.
| 종류 | 사용자에게 할 안내 |
|---|---|
| 앱 | 이미 로그인된 다른 기기의 텔레그램 공식 알림을 보라 |
| 문자 · 전화 | 문자 메시지나 자동 음성 전화를 기다리라 |
| 짧은 전화(플래시·부재중) | 걸려 온 번호(끝자리)가 코드다 |
| 이메일 | 로그인 이메일로 온 코드를 보라 |
| 프래그먼트 | 익명 번호(+888)는 fragment.com 에서 코드를 본다 |
- 다른 방법으로 다시 받기는
auth.resendCode, 그만두기는auth.cancelCode입니다. 서버가 다음 방법과 기다릴 시간을 알려 주면 그 시간 전에는 다시 요청하지 않습니다. - 사용자가 코드를 남에게 전달한 흔적이 있으면 그 코드를 무효로 하는 장치(account.invalidateSignInCodes)도 있습니다. 로그인 코드는 누구에게도 보여 주지 않게 안내합니다.
2단계 인증 — 비밀번호를 보내지 않는다
2단계 인증이 켜진 계정은 코드 다음에 클라우드 비밀번호를 묻습니다. 이때 비밀번호 자체를 서버로 보내지 않습니다. account.getPassword 로 받은 값(소금·매개변수)으로 비밀번호를 증명하는 값을 계산해 auth.checkPassword 에 보내는 SRP 방식입니다. 계산 과정이 길고 틀리기 쉬워, 직접 구현보다 TDLib 같은 라이브러리를 권합니다(TDLib 이란).
로그인 뒤
- 로그인한 세션은 사용자의 '기기' 목록에 내 앱 이름으로 나타납니다. 사용자가 거기서 끊을 수 있다는 점을 화면에 알려 줍니다.
- 세션이 끊기면 다음 요청에서 401 오류(
AUTH_KEY_UNREGISTERED·SESSION_REVOKED등)가 오니, 로그인 화면으로 돌려보냅니다(오류 읽기). - 로그아웃은
auth.logOut— 기기에 남은 세션 파일도 지웁니다.
자주 묻는 질문
텔레그램 API 로그인은 어떤 순서인가요?
auth.sendCode 로 코드를 요청하고 auth.signIn 으로 코드를 확인합니다. 새 번호면 auth.signUp, 2단계 인증이 켜져 있으면 SRP 로 비밀번호를 확인합니다.
SESSION_PASSWORD_NEEDED 가 나와요.
2단계 인증이 켜진 계정입니다. account.getPassword 로 값을 받아 auth.checkPassword 로 비밀번호를 SRP 방식으로 확인합니다.
로그인 코드가 문자로 안 와요.
서버가 이미 로그인된 기기의 텔레그램 앱으로 보냈을 수 있습니다. sentCode 종류를 보고 안내합니다.
개발할 때 진짜 번호를 계속 써야 하나요?
시험 서버와 공식 문서가 안내하는 시험용 번호를 쓰면 진짜 번호로 코드를 계속 받지 않아도 됩니다.
참고한 공식 문서
한눈에 정리
- 1순서
sendCode · signIn · 2FA.
- 2코드
앱 · 문자 · 전화 · 이메일.
- 3시험
test DC · 시험 번호.
최종 수정 2026-10-06