전화번호를 자동으로 확인하려면 인증 흐름에서 클라이언트와 서버 부분을 모두 구현해야 합니다. 이 문서에서는 서버 부분을 구현하는 방법을 설명합니다.
전화 인증 서버는 다음 세 가지 작업을 수행합니다.
- 일회성 코드가 포함되며 클라이언트 측 SMS Retriever API가 예상하는 형식을 사용하는 인증 메시지를 구성합니다.
- 사용자의 기기로 확인 메시지 전송
- 코드가 서버로 다시 전송될 때 일회용 코드를 확인하고 백엔드가 요구하는 사후 작업 완료
앱이 서버와 상호작용하는 방식에 관한 세부정보는 개발자에게 달려 있습니다. 일반적인 방법은 두 가지 엔드포인트가 있는 REST API를 노출하는 것입니다. 엔드포인트는 특정 전화번호 인증 요청을 수신하고 SMS 인증 메시지를 전송하며, 두 번째 엔드포인트는 앱에서 일회성 코드를 수신합니다.
1. 인증 메시지 작성하기
서버에서 전화번호 인증 요청을 수신하면 먼저 사용자의 기기로 전송할 확인 메시지를 작성합니다. 이 메시지는 다음을 충족해야 합니다.
- 140바이트 이하여야 합니다.
- 클라이언트가 서버로 다시 전송하여 인증 절차를 완료하는 일회성 코드를 포함합니다 (일회용 코드 생성 참고).
- 앱을 식별하는 11자 해시 문자열을 포함합니다 (앱 해시 문자열 계산 참고).
그렇지 않으면 인증 메시지의 내용을 원하는 대로 선택할 수 있습니다. 나중에 일회용 코드를 쉽게 추출할 수 있는 메시지를 만드는 것이 좋습니다. 예를 들어 유효한 확인 메시지는 다음과 같습니다.
Your ExampleApp code is: 123ABC78FA+9qCX9VSu
일회용 코드 생성
코드가 명확하지 않고 클라이언트 앱이 서버에 다시 전송할 때 코드를 사용자 또는 전화번호에 연결할 수 있다면 여러 가지 방법으로 일회용 코드를 구현할 수 있습니다. 사용자가 코드를 수동으로 입력해야 하는 상황에 맞게 코드를 쉽게 입력할 수 있도록 해야 합니다.
일회용 코드를 구현하는 한 가지 방법은 랜덤 숫자를 생성하여 데이터베이스 테이블에서 키로 사용하는 것입니다. 예를 들어 다음과 같은 PendingVerifications 테이블이 있을 수 있습니다.
ID | 사용자 | 만료 |
---|---|---|
123456789... | 1234 | 2017년 3월 14일 1:59 |
base32로 인코딩된 ID를 일회용 코드로 사용할 수 있습니다.
앱의 해시 문자열 계산
Google Play 서비스는 해시 문자열을 사용하여 앱에 전송할 확인 메시지를 결정합니다. 해시 문자열은 앱의 패키지 이름과 앱의 공개 키 인증서로 구성됩니다. 해시 문자열을 생성하려면 다음 안내를 따르세요.
Google Play 앱 서명을 사용하는 경우 Google Play Console의 앱 서명 섹션에서 앱 서명 인증서(
deployment_cert.der
)를 다운로드합니다.그런 다음 앱 서명 인증서를 임시 키 저장소로 가져옵니다.
keytool -importcert -file deployment_cert.der -keystore temporary.keystore -alias PlayDeploymentCert
APK에 직접 서명하는 경우 이 단계를 건너뛰세요.
앱 서명 인증서(위에서 가져온 인증서 또는 APK에 직접 서명하는 데 사용하는 인증서)를 16진수 소문자로 가져옵니다.
예를 들어 위에서 만든 임시 키 저장소의 16진수 문자열을 가져오려면
keytool -exportcert -keystore temporary.keystore -alias PlayDeploymentCert | xxd -p | tr -d "[:space:]"
명령어를 입력합니다.APK에 직접 서명하는 경우 프로덕션 키 저장소와 인증서 별칭을 지정합니다.
임시 키 저장소를 만든 경우 삭제합니다.
앱의 패키지 이름에 16진수 문자열을 단일 공백으로 구분하여 추가합니다.
결합된 문자열의 SHA-256 sum을 계산합니다. SHA-256 합계를 계산하기 전에 문자열에서 선행 또는 후행 공백을 삭제해야 합니다.
SHA-256 sum의 바이너리 값을 Base64로 인코딩합니다. 먼저 출력 형식에서 SHA-256 sum을 디코딩해야 할 수 있습니다.
앱의 해시 문자열은 base64로 인코딩된 해시의 처음 11자입니다.
다음 명령어는 앱의 프로덕션 키 저장소에서 해시 문자열을 계산합니다.
keytool -exportcert -alias PlayDeploymentCert -keystore MyProductionKeys.keystore | xxd -p | tr -d "[:space:]" | echo -n com.example.myapp `cat` | sha256sum | tr -d "[:space:]-" | xxd -r -p | base64 | cut -c1-11
또는 SMS 리트리버 샘플 앱에서 AppSignatureHelper 클래스로 앱의 해시 문자열을 가져올 수 있습니다. 그러나 도우미 클래스를 사용하는 경우 해시 문자열을 가져온 후 앱에서 삭제해야 합니다. 클라이언트에서 동적으로 계산된 해시 문자열을 인증 메시지에 사용하지 마세요.
2. SMS로 인증 메시지 보내기
인증 메시지를 작성한 후 SMS 시스템을 사용하여 사용자의 전화번호로 메시지를 보내세요.
예를 들어 Twilio 개발자 사이트의 Twilio SMS를 사용한 앱 인증을 참조하세요.
사용자의 기기에서 이 메시지를 수신하면 메시지가 앱으로 전달됩니다. 앱에서 일회성 코드를 추출하여 서버로 다시 전송하여 확인 절차를 완료합니다.
3. 코드가 반환되면 일회용 코드를 확인하세요.
일반적으로 전화번호 확인 서버에는 클라이언트 앱에서 일회성 코드를 수신하는 데 사용하는 두 번째 엔드포인트가 있습니다. 서버가 앱 엔드포인트에서 이 엔드포인트의 일회용 코드를 받으면 다음 단계를 따르세요.
- 일회성 코드가 유효하고 만료되지 않았는지 확인합니다.
- 일회성 코드에 연결된 사용자가 전화번호 인증을 완료했음을 기록합니다.
- 일회성 코드를 삭제하거나 다른 방식으로 동일한 코드를 다시 사용할 수 없도록 합니다.
사용자의 인증 상태를 기록하고 데이터베이스에서 일회용 코드를 삭제하면 인증이 완료됩니다.