티스토리 뷰

이 페이지는 문자 인증서비스를 할 수 있는 google SMS Retriever API를 서버측에서 이용하는 방법을 설명하고 있습니다.

SMS Retriever API는 Play 서비스 버전 10.2 이상이 설치된 Android 기기에서만 사용할 수 있다.


참고페이지)

Automatic SMS Verification with the SMS Retriever API

Perform SMS Verification on a Server




1) Obtain the user's phone number in Android

안드로이드에서 사용자 전화번호를 E164 형식으로 얻을 수 있는데, 경우에 따라 전화번호를 가져오지 못하는 경우가 있을 수 있다. 이 경우 사용자가 수동으로 입력하는 방법으로 진행해야 한다. 

→ E164 format : 국제 표준화기구에서 정의한 국제 전화번호 형식.

ex) +821012345678




2) Construct a verification message

안드로이드에서 서버에게 확인 요청을 하면, 서버는 확인 메세지를 생성하고 전송받은 전화번호로 메시지를 보내게 된다. 

→ 사용자의 장치로 보낼 “확인 메시지”는 다음 조건들을 충족해야한다.

  • 140 바이트 이하여야 한다.
  • 접두어로 시작해야한다. <#>
  • 검증을 완료하기 위해 클라이언트가 서버로 다시 보내는 일회성 코드를 포함해야한다. (2-1 참조)
  • 앱을 식별하는 11자의 해시 문자열로 끝납니다 (2-2 참조)



일회성 코드는 쉽게 추출할 수 있게 만드는 것이 좋은데, 위의 조건을 만족하는 확인 메시지는 다음과 같다.


<#> ExampleApp 코드 : 123ABC78

FA + 9qCX9VSu


** 맨 앞에 <#> 값과 맨 뒤에 11자리의 해쉬값이 무조건 들어가야 한다.



2-1) Generating a one-time code

여러 가지 방법으로 일회성 코드를 구현할 수 있으며, 클라이언트가 코드를 서버로 다시 보낼 때 이 코드를 사용자 또는 전화 번호에 연결할 수 있다. 사용자가 직접 코드를 입력해야하는 상황이 생길수도 있으니 코드를 쉽게 입력해야한다.


다양한 방법 중 일회성 코드를 구현하는 한 가지 방법은 데이터베이스 테이블에서 키로 사용하는 난수로 생성하는 것이다.



2-2) Computing your app's hash string

Google Play 서비스는 해시 문자열을 사용하여 앱에 보낼 확인 메시지를 결정하는데, 해시 문자열은 앱의 패키지 이름과 앱의 공개 키 인증서로 구성됩니다. 해시 문자열을 생성하려면 다음과 같은 방식으로 진행한다.


앱의 공개 키 인증서를 소문자 문자열로 사용한다. keystore에서 16진수 문자열을 가져 오려면 다음 명령을 입력하면 된다.

$ keytool -alias MyAndroidKey -exportcert -keystore MyProduction.keystore | xxd -p | tr -d "[:space:]"

하나의 공백으로 구분하여 앱의 패키지 이름에 16 진수 문자열을 추가한다.

결합 된 문자열의 SHA-256 합계를 계산한다. SHA-256 합을 계산하기 전에 문자열에서 공백을 제거해야한다.

Base64- SHA-256 합계의 이진 값을 인코딩하는데, 먼저 출력 형식에서 SHA-256 합계를 디코딩 해야 할 수도 있다.

앱의 해시 문자열은 base64 인코딩 해시의 처음 11자.

다음 명령은 앱의 프로덕션 키 저장소에서 해시 문자열을 계산하게 한다.


$ keytool -exportcert -alias MyAndroidKey -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 클래스를 사용하여 응용 프로그램의 해시 문자열을 가져올 수 있는데, helper 클래스를 사용하는 경우 해시 문자열을 얻은 후 앱에서 해당 클래스를 제거해야한다. 확인 메시지에서 클라이언트에서 동적으로 계산 된 해시 문자열을 사용하지 않는다.




3) send SMS


서버가 기존에 구축한 SMS 서비스를 사용하여 지정한 전화번호로 위에서 생성한 확인메시지를 보낼 수 있다. 

(그 이후는 클라이언트측에서 메시지가 수신되면 일회성 코드를 캐치할 것이다.)




4) Verify the one-time code when it's returned


전화 번호 확인 서버에서 클라이언트 응용 프로그램로부터 받은 일회성 코드를 수신하는데 아래와 같은 flow로 진행한다.

  • 코드가 유효하고 만료되지 않았는지 확인한다.
  • 코드에 링크 된 사용자가 전화 번호 확인을 완료했음을 기록한다.
  • 코드의 데이터베이스 레코드를 제거하거나 다른 방법으로 같은 코드를 다시 사용할 수 없도록 해야한다.
  • 사용자의 확인 상태를 기록하고 데이터베이스에서 코드를 제거하면 확인이 완료된다.


'Programming > Other' 카테고리의 다른 글

[MAC] Microsoft Remote Desktop 10  (1) 2019.08.06
[IT] Linux Crontab  (0) 2019.01.23
[IT] REST API  (0) 2018.12.09
[MAC] DockBar Delay  (0) 2018.11.20
[MAC] 마우스 속도조절  (0) 2018.11.12
댓글
최근에 올라온 글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday