คู่มือการเริ่มต้นใช้งานทางเทคนิคของผู้ให้บริการ FPNV

วันที่แก้ไขล่าสุด: 10 ก.ย. 2025

ภาพรวม

เอกสารนี้จะบันทึกขั้นตอนที่จำเป็นทั้งหมดในการเริ่มต้นใช้งานผู้ให้บริการใน การยืนยันหมายเลขโทรศัพท์ Firebase (FPNV) ผ่านการยืนยันหมายเลขโทรศัพท์ TS.43

คำศัพท์

บุคคลที่เกี่ยวข้อง

  • CSP: ผู้ให้บริการด้านการสื่อสาร
    • เช่น ผู้ให้บริการเครือข่ายมือถือ
  • ผู้รวบรวมข้อมูล
    • ผู้รวบรวมที่ใช้แอป: ผู้รวบรวมที่อนุญาตให้แอปทำการยืนยันโดยไม่ต้องให้แอปโต้ตอบกับผู้ให้บริการโดยตรง
    • เช่น การยืนยันหมายเลขโทรศัพท์ของ Firebase
    • ผู้รวบรวมข้อมูลเมตา: ผู้รวบรวมข้อมูลที่สนับสนุนผู้ให้บริการในการเริ่มต้นใช้งาน ผู้รวบรวมข้อมูลที่แสดงในแอป
      • เมตาแอกกริเกเตอร์อาจมีหน้าที่ตั้งค่าเซิร์ฟเวอร์การให้สิทธิ์ สำหรับผู้ให้บริการและ/หรือกำหนดค่ารายละเอียดเซิร์ฟเวอร์การให้สิทธิ์กับ แอกกริเกเตอร์ที่ใช้กับแอป
  • FPNV: การยืนยันหมายเลขโทรศัพท์ของ Firebase
  • TAM ของ Google: ผู้จัดการลูกค้าด้านเทคนิคของ Google ซึ่งช่วยให้ผู้ให้บริการ เริ่มต้นใช้งาน FPNV
  • โทรศัพท์ Android: มี API หมายเลขโทรศัพท์ใน Android ซึ่งรวมถึงแพลตฟอร์มสำหรับผู้ให้บริการและผู้รวบรวมข้อมูลเพื่อให้บริการยืนยัน TS.43
  • GSMA: สมาคมผู้ให้บริการเครือข่ายมือถือที่กำหนดข้อกำหนดต่างๆ รวมถึง TS.43
  • CAMARA: โปรเจ็กต์โอเพนซอร์สของ Linux ที่กำหนด API ของผู้ให้บริการโดย ร่วมมือกับ GSMA

ข้อกำหนดในการยืนยัน

  • PNV: การยืนยันหมายเลขโทรศัพท์
  • TS.43: กำหนดโปรโตคอลสำหรับไคลเอ็นต์และเซิร์ฟเวอร์บนอุปกรณ์เคลื่อนที่เพื่อสื่อสารกับผู้ให้บริการโดยใช้ HTTP
  • EAP-AKA: วิธีการตรวจสอบสิทธิ์ที่กำหนดไว้ใน https://www.rfc-editor.org/rfc/rfc4187 ซึ่งไม่ ต้องโต้ตอบกับผู้ใช้
  • ECS: Entitlement Configuration Server
    • จุดแรกเข้าสำหรับผู้รวบรวมข้อมูลในการพูดคุยกับผู้ให้บริการ
  • ODSA: การเปิดใช้งานบริการในอุปกรณ์
    • หมายถึงการดำเนินการต่างๆ ที่ ECS จัดให้เพื่อเปิดใช้งานบริการใน อุปกรณ์
    • เช่น AcquireTemporaryToken, GetPhoneNumber

เซิร์ฟเวอร์การให้สิทธิ์ของผู้ให้บริการและอุปกรณ์ปลายทาง PNV

สร้างปลายทางที่จำเป็น

การดำเนินการ 1: ผู้ให้บริการจะใช้ปลายทางต่อไปนี้ ซึ่งทั้งหมด เข้าถึงได้ผ่านอินเทอร์เน็ต ดูรายละเอียดเพิ่มเติมเกี่ยวกับการ ติดตั้งใช้งานได้ที่ภาคผนวก ก

ข้อกำหนดทางเทคนิค

ประสิทธิภาพทั่วไป: เวลาทำงานของอุปกรณ์ปลายทางทั้งหมดต้องมีอย่างน้อย 99.99%

ความปลอดภัย: ด้วยเหตุผลด้านความปลอดภัย จุดสิ้นสุดของผู้ให้บริการต้องเป็นไปตามข้อกำหนดต่อไปนี้

  • โทเค็นการให้สิทธิ์ EAP-AKA: ต้องหมดอายุภายใน 1 ชั่วโมง
  • โทเค็นชั่วคราว: ใช้ได้ครั้งเดียวและจะหมดอายุใน 5 นาที
  • ตัวเลือกที่ 1 - Vanilla TS.43
    • โทเค็น OAuth: ต้องหมดอายุภายใน 1 ชั่วโมง
  • ตัวเลือกที่ 2 - CAMARA
    • โทเค็นเพื่อการเข้าถึง CAMARA: ใช้ได้ครั้งเดียวและจะหมดอายุใน 5 นาที

คุณภาพของข้อมูล API: เนื้อหาทั้งหมดของการตอบกลับที่สําเร็จ (เช่น MSISDN ควรถูกต้อง)

FPNV รองรับ TS.43 2 รูปแบบ ความแตกต่างหลักคือวิธีที่เซิร์ฟเวอร์ FPNV จะแลกเปลี่ยน TempToken กับผู้ให้บริการ

  • TS.43 แบบดั้งเดิม: หมายถึงการติดตั้งใช้งานตามที่ระบุไว้ในข้อกำหนดเฉพาะของ TS.43
  • CAMARA: หมายถึงการใช้งานตามที่กำหนดโดยโฟลว์ JWT Bearer ของ CAMARA

ตัวเลือกที่ 1 - การติดตั้งใช้งาน TS.43 แบบดั้งเดิม

คำขอจากอุปกรณ์ Android

  1. ปลายทาง EAP-AKA: แสดงโทเค็นการให้สิทธิ์
  2. ปลายทาง AcquireTemporaryToken: เมื่อได้รับโทเค็นการให้สิทธิ์ ให้ส่งคืน TempToken

คำขอจากเซิร์ฟเวอร์ FPNV

  1. ปลายทาง OAuth 2.0 - ขั้นตอนรหัสไคลเอ็นต์/รหัสลับ OAuth: เมื่อระบุรหัสไคลเอ็นต์/รหัสลับ OAuth ให้แสดงโทเค็นเพื่อการเข้าถึง OAuth
  2. ปลายทาง GetPhoneNumber: เมื่อได้รับโทเค็นเพื่อการเข้าถึง OAuth และ TempToken ให้แสดงหมายเลขโทรศัพท์ที่เกี่ยวข้อง

ตัวเลือกที่ 2 - การติดตั้งใช้งาน CAMARA

การใช้งาน CAMARA จะคล้ายกับการใช้งาน TS.43 แบบเดิม ยกเว้น สำหรับปลายทางที่ใช้จัดการคำขอจากเซิร์ฟเวอร์ FPNV

คำขอจากอุปกรณ์ Android

  1. ปลายทาง EAP-AKA: แสดงโทเค็นการให้สิทธิ์
  2. ปลายทาง AcquireTemporaryToken: เมื่อได้รับโทเค็นการให้สิทธิ์ ให้ส่งคืน TempToken

คำขอจากเซิร์ฟเวอร์ FPNV

  1. ปลายทาง OAuth 2.0 - ขั้นตอน JWT Bearer: เมื่อได้รับ JWT ที่มี TempToken ให้ส่งคืนโทเค็นเพื่อการเข้าถึง CAMARA
  2. ปลายทาง NumberVerification v2 ของ CAMARA: เมื่อได้รับโทเค็นเพื่อการเข้าถึงของ CAMARA ให้แสดงหมายเลขโทรศัพท์ที่เกี่ยวข้อง

การเริ่มต้นใช้งานโทรศัพท์ Android และ FPNV

แอปทดสอบของผู้ให้บริการ

การดำเนินการ 2: ผู้ให้บริการติดต่อผู้จัดการลูกค้าด้านเทคนิค (TAM) ของ Google และ TAM จะแชร์แอปทดสอบผู้ให้บริการ FPNV กับผู้ให้บริการ แอปทดสอบผู้ให้บริการ นี้จะจำลองคำขอที่ FPNV จะส่งโดยไม่ต้องใช้เซิร์ฟเวอร์ FPNV แอปทดสอบผู้ให้บริการนี้มีประโยชน์สำหรับผู้ให้บริการในการตรวจสอบว่า ปลายทางทำงานอย่างถูกต้อง

ACTION3: ผู้ให้บริการยืนยันว่าปลายทางข้างต้นทํางานแบบครบวงจรโดย ใช้แอปทดสอบผู้ให้บริการ FPNV

การตั้งค่าการกำหนดค่าที่จำเป็นสำหรับการใช้งานจริง

การกำหนดค่า Android - EAP-AKA / AcquireTempToken

ACTION4: ผู้ให้บริการกำหนดค่าการผลิตสำหรับคำขอ EAP-AKA/AcquireTempToken จาก Android Telephony

  • การกำหนดค่า
    • รหัสผู้ให้บริการ Canonical ของ Android ของผู้ให้บริการรายนี้
    • ค่า TS.43 use_cases: use_case=GetPhoneNumber
    • URL ของเซิร์ฟเวอร์การให้สิทธิ์เวอร์ชันที่ใช้งานจริงสำหรับ EAP-AKA/AcquireTempToken
    • SAN และลายนิ้วมือของใบรับรอง x509 เวอร์ชันที่ใช้งานจริงของ Firebase
    • SAN: fpnv.googleapis.com
    • ลายนิ้วมือ: aad068c93399a22fc2b11ab58468e8cb72b8f9fc53700991799a8b764c589c7e

การกำหนดค่า Firebase - แลกเปลี่ยน TempToken สำหรับโทรศัพท์

ACTION5: ข้อมูลเข้าสู่ระบบ Firebase เพื่อดึงโทเค็น OAuth จากผู้ให้บริการ

  • Vanilla TS.43
    • ผู้ให้บริการสร้างรหัสไคลเอ็นต์และรหัสลับ OAuth สำหรับคำขอของ FPNV ผู้ให้บริการ จะกำหนดค่าปลายทาง OAuth เพื่อแสดงโทเค็นเพื่อการเข้าถึงสำหรับข้อมูลเข้าสู่ระบบเหล่านี้
  • CAMARA
    • TAM ของ Google จะให้คีย์สาธารณะของ Google เพื่อให้ปลายทาง OAuth ของผู้ให้บริการ ยืนยันได้ว่า Google เป็นผู้ลงนามใน JWT

ACTION6: ผู้ให้บริการกำหนดค่าการใช้งานจริงสำหรับเซิร์ฟเวอร์ FPNV เพื่อแลกเปลี่ยน TempToken สำหรับโทรศัพท์

  • รหัสผู้ให้บริการแบบมาตรฐานของ Android ของ MNO นี้
  • Vanilla TS.43
    • OAuth - ขั้นตอนรหัสไคลเอ็นต์/ข้อมูลลับ
    • URL ปลายทางของ OAuth
    • รหัสไคลเอ็นต์/รหัสลับไคลเอ็นต์ OAuth
    • ขอบเขต OAuth (หากมี)
    • GetPhoneNumber
    • URL ของปลายทาง GetPhoneNumber
  • CAMARA
    • OAuth - ขั้นตอนการส่งโทเค็น JWT
    • URL ปลายทางของ OAuth
    • NumberVerification API v2
    • URL ของปลายทาง NumberVerification

การแชร์ข้อมูลเข้าสู่ระบบ/การกำหนดค่า

การยืนยันหมายเลขโทรศัพท์ Firebase

การดำเนินการ 7: ผู้ให้บริการแชร์การกำหนดค่าการใช้งานจริงจากการดำเนินการ 4 และการดำเนินการ 6 กับผู้จัดการฝ่ายเทคนิคของ Google

  • [สำคัญ] ต้องแชร์ข้อมูลลับของ OAuth โดยใช้กลไกนอกแบนด์ (ไม่มี อีเมล ไม่มีเอกสาร ฯลฯ) ที่ปลอดภัยกับ Google ผู้ให้บริการและ TAM ของ Google จะตกลงกลไกนอกแบนด์นี้

การดำเนินการ 8: TAM ของ Google จะตรวจสอบว่าการกำหนดค่าใช้งานได้แบบครบวงจรโดยใช้ แอปทดสอบของผู้ให้บริการ จากนั้น TAM ของ Google จะจัดเก็บข้อมูลเข้าสู่ระบบ OAuth ใน ที่เก็บข้อมูลที่ปลอดภัยของ Google และอัปเดตการกำหนดค่าของ FPNV เพื่อแลกเปลี่ยน TempToken สำหรับโทรศัพท์ (เช่น การกำหนดค่าของการดำเนินการ 6)

โทรศัพท์ Android

ACTION9: ผู้ให้บริการทำตามเอกสาร "การเริ่มต้นใช้งาน CSP ของ Google Open Gateway" (ซึ่ง TAM ของ Google จะแชร์กับผู้ให้บริการ) ผู้ให้บริการหรือ TAM ของ Google จะยื่นคำขอใน Buganizer เพื่อเริ่มต้นใช้งานการกำหนดค่าของ Android Telephony ที่ https://issuetracker.google.com/issues/new?component=1861595&template=2168610 ข้อบกพร่องนี้จะใช้การกำหนดค่าเวอร์ชันที่ใช้งานจริงจาก ACTION4

หากเมตาแอกกริเกเตอร์ตั้งค่าการผสานรวม FPNV ในนามของผู้ให้บริการ ผู้ให้บริการจะต้องออกหนังสือแสดงความยินยอม (อีเมล, PDF, จดหมาย ฯลฯ) จาก ผู้นำของผู้ให้บริการ (ระดับผู้อำนวยการขึ้นไป) เพื่อยืนยันความสัมพันธ์ทางธุรกิจกับผู้ให้บริการดังกล่าว หลังจากนั้น เมตาแอกกริเกเตอร์จะระบุการกำหนดค่าของผู้ให้บริการ ในนามของผู้ให้บริการไปยัง Android Telephony ได้

ภาคผนวก ก. การติดตั้งใช้งานโดยละเอียด

คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่

  • ส่วนหัว HTTP ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
  • อย่างไรก็ตาม รูปแบบ XML และ JSON จะคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ดังนั้นสำหรับฟิลด์คำขอ/คำตอบ โปรดตรวจสอบว่าฟิลด์ตรงกับเอกสารนี้ทุกประการ

ขั้นตอนที่ 1 - EAP-AKA / AcquireTempToken

แผนภาพแสดงอุปกรณ์ที่ใช้ EAP-AKA และ AcquireTempToken เพื่อดึงโทเค็นชั่วคราวจากเซิร์ฟเวอร์ของผู้ให้บริการ
รูปที่ 1 อุปกรณ์จะเรียกข้อมูล TempToken จากเซิร์ฟเวอร์ของผู้ให้บริการโดย ดำเนินการ EAP-AKA แล้ว AcquireTempToken ขั้นตอนที่ 2 - แลกเปลี่ยน TempToken เป็นหมายเลขโทรศัพท์ จะอธิบายวิธีแลกเปลี่ยน TempToken เป็นหมายเลขโทรศัพท์

ปลายทาง: EAP-AKA และ AcquireTempToken ต้องใช้ปลายทาง ECS เดียวกัน

EAP-AKA Challenge

ข้อมูลอ้างอิง: TS.43 v12.0 - Section 2.8.1 - "Embedded EAP-AKA Authentication by Entitlement Configuration Server"

EAP-AKA ขั้นตอนที่ 1 - คำท้าในการตรวจสอบสิทธิ์
EAP-AKA #1 - คำขอ GET ไปยัง ECS

โมดูลโทรศัพท์ Android จะส่งคำขอ TS.43 EAP-AKA ไปยังเซิร์ฟเวอร์การให้สิทธิ์ของ ผู้ให้บริการ

ส่วนหัวของคำขอของ Android

  • Accept: application/vnd.gsma.eap-relay.v1.0+json
    • ซึ่งเป็นรูปแบบ JSON ที่เฉพาะเจาะจงสำหรับ GSMA ไม่ใช่แค่ application/json

ฟิลด์คำขอของ Android

  • eap_id: ดูภาคผนวก ค. ของ RCC.14
    • กล่าวคือ 0<IMSI>@<realm>.mnc<MNC>.mcc<MCC>.3gppnetwork.org
  • GID1: ระบุเฉพาะในกรณีที่เวอร์ชันการให้สิทธิ์เป็น 12.0
  • app_name: AppName ที่เข้ารหัสจะมีค่าแฮช MD5 ของ Use Case ที่ทำการยืนยันหมายเลขโทรศัพท์ ดังนี้
    • คำขอของตัวรวบรวมทั้งหมดที่ส่งไปยังแอปจะมีชื่อแอปเป็น Google-OGI
  • app: รหัสแอป ap2014 แสดงข้อมูลหมายเลขโทรศัพท์
  • terminal_vendor/model/sw_version: ตั้งค่าเป็นค่าใดก็ได้ Android ไม่รับประกันว่าฟิลด์เหล่านี้จะมีข้อมูลจริงของอุปกรณ์
  • vers: เวอร์ชันการกำหนดค่า เช่น 0 หรือ 1
  • entitlement_version: Google จะกำหนดค่าเวอร์ชันการให้สิทธิ์ที่ส่ง ไปยังผู้ให้บริการตามสิ่งที่ผู้ให้บริการร้องขอ
    • โดยปกติ entitlement_version จะเป็น 10.0 หรือ 12.0
EAP-AKA #1 - Response from ECS

ส่วนหัวการตอบกลับของ ECS

  • Content-Type: Android คาดหวังว่าประเภทการตอบกลับจะตรงกับ ส่วนหัว Accept ของคำขอ
    • กล่าวคือ application/vnd.gsma.eap-relay.v1.0+json

ฟิลด์การตอบกลับของ ECS

EAP-AKA ขั้นตอนที่ 2 - รับโทเค็นการตรวจสอบสิทธิ์
EAP-AKA #2 - คำขอ POST ไปยัง ECS

จากนั้นโมดูลโทรศัพท์ Android จะส่ง eap-relay-packet ที่ได้รับกลับไปยังปลายทางเดียวกัน

ส่วนหัวของคำขอของ Android

  • Accept: Android จะตั้งค่าส่วนหัว Accept 2 รายการ ดังนี้
    • application/vnd.gsma.eap-relay.v1.0+json: หมายถึงผู้ให้บริการเครือข่าย ส่ง JSON อีกครั้งหากอุปกรณ์ต้องส่งคำขอ EAP-AKA อีกครั้ง
    • text/vnd.wap.connectivity-xml: หมายถึงรูปแบบจริงที่ Android คาดหวังว่าผู้ให้บริการจะส่งคืนโทเค็นการตรวจสอบสิทธิ์ EAP-AKA
  • Content-Type: application/vnd.gsma.eap-relay.v1.0+json

ฟิลด์คำขอของ Android

  • eap-relay-packet: มี eap-relay-packet ของการตอบกลับ EAP-AKA ก่อนหน้า แต่ในรูปแบบ EAP-Response/AKA-Challenge ตาม RFC 4817 - ส่วนที่ 9.2
EAP-AKA #2 - Response from ECS

หลังจากตรวจสอบสิทธิ์ EAP-AKA สำเร็จแล้ว ผู้ให้บริการจะส่งโทเค็นการให้สิทธิ์ กลับมา

ส่วนหัวการตอบกลับของ ECS

  • Content-Type: Android คาดหวังว่าการตอบกลับที่ตรงกับ ส่วนหัว Accept ของคำขอ
    • กล่าวคือ Android คาดหวังว่าการตอบกลับที่มีโทเค็นการให้สิทธิ์จะมีประเภทเป็น text/vnd.wap.connectivity-xml
    • ส่วนหัว Accept อื่น application/vnd.gsma.eap-relay.v1.0+json จะใช้ในกรณีที่ ผู้ให้บริการต้องการให้ Android ส่งคำขอ EAP-AKA อื่น

ฟิลด์การตอบกลับของ ECS

  • TOKEN.token: มีโทเค็นการตรวจสอบสิทธิ์
  • TOKEN.validity: จำนวนวินาทีที่การตอบกลับใช้ได้หลังจากที่ อุปกรณ์ได้รับการตอบกลับ

AcquireTemporary Token

AcquireTempToken - คำขอ GET ไปยัง ECS

ไคลเอ็นต์ Android จะใช้โทเค็นการให้สิทธิ์ที่ได้รับจาก EAP-AKA เพื่อดึงโทเค็นชั่วคราวโดยการเรียกใช้ปลายทาง AcquireTemporaryToken ของผู้ให้บริการ คำขอ

  • ตัวอย่าง: TS.43 v12.0 - Section 6.4.6 - "AcquireTemporaryToken Request Example"
  • AcquireTempToken มีพารามิเตอร์คล้ายกับ EAP-AKA #1 ยกเว้น
    • AcquireTempToken ยังระบุ IMSI, operation และ operation_targets
    • AcquireTempToken ไม่ได้ระบุ EAP_ID

ส่วนหัวของคำขอของ Android

  • Accept: Android จะตั้งค่า text/vnd.wap.connectivity-xml

ฟิลด์คำขอของ Android

  • terminal_vendor/model/sw_version: Android ไม่รับประกันว่าฟิลด์เหล่านี้จะมีข้อมูลจริงของอุปกรณ์
  • operation_targets
    • FPNV: เป้าหมายการดำเนินการคือ GetPhoneNumber

AcquireTempToken - การตอบกลับจาก ECS

ตัวอย่าง: TS.43 v12.0 - Section 6.6.6 - "AcquireTemporaryToken Response Example"

ส่วนหัวการตอบกลับของ ECS

  • Content-Type: Android คาดหวังว่าประเภทการตอบกลับจะตรงกับ ส่วนหัว Accept ของคำขอ
    • กล่าวคือ text/vnd.wap.connectivity-xml

ฟิลด์การตอบกลับของ ECS

  • APPLICATION.TemporaryToken: TemporaryToken ที่เซิร์ฟเวอร์ FPNV สามารถ แลกเปลี่ยนเป็นหมายเลขโทรศัพท์ได้
  • APPLICATION.TemporaryTokenExpiry: เวลาหมดอายุในรูปแบบ YYYY-MM-DDThh:mm:ssTZD
  • APPLICATION.OperationResult: ดูTS.43 v12.0 - Section 6.5.1
    • กล่าวคือ หากการดำเนินการเป็น SUCCESS ให้แสดงผลเป็น 1

ขั้นตอนที่ 2 - แลกเปลี่ยน TempToken เป็นหมายเลขโทรศัพท์

ตัวเลือกที่ 1 - Vanilla TS.43

แผนภาพแสดงเซิร์ฟเวอร์ของ Google แลกเปลี่ยนโทเค็นชั่วคราวสำหรับหมายเลขโทรศัพท์ที่ยืนยันแล้วกับผู้ให้บริการโดยใช้ Vanilla TS.43
รูปที่ 2ก. จากนั้นเซิร์ฟเวอร์ของ Google จะส่ง TempToken ไปยังผู้ให้บริการเพื่อแลกกับหมายเลขโทรศัพท์ที่ยืนยันแล้วโดยการเรียก GetPhoneNumber แผนภาพนี้ สรุปขั้นตอนที่ 1 - EAP-AKA / AcquireTempToken

ปลายทาง: ปลายทาง OAuth และ GetPhoneNumber อาจเป็นเซิร์ฟเวอร์/ปลายทางที่แตกต่างกัน นอกจากนี้ Endpoint เหล่านี้ยังอาจแตกต่างจาก Endpoint EAP-AKA/AcquireTempToken ด้วย

OAuth

ผู้ให้บริการควรทำตามคู่มือ OAuth นี้และให้ข้อมูล OAuth ที่จำเป็น (รหัสไคลเอ็นต์ รหัสลับไคลเอ็นต์ URL ของเซิร์ฟเวอร์ OAuth) แก่ Google

OAuth - คำขอ POST ไปยังเซิร์ฟเวอร์การตรวจสอบสิทธิ์ของผู้ให้บริการ

ส่วนหัวของคำขอ FPNV

  • Authorization: FPNV จะตั้งค่า Basic $BASE64_ENCODED_CREDENTIALS
    • ข้อมูลเข้าสู่ระบบที่เข้ารหัส Base64 คือการเข้ารหัส Base64 ของ OAuth $CLIENT_ID:$CLIENT_SECRET
  • Content-Type: FPNV จะตั้งค่า application/x-www-form-urlencoded
  • Accept: FPNV จะตั้งค่า application/json

ฟิลด์คำขอ FPNV

  • grant_type: client_credentials
POST HTTP/1.1
Host: $OAUTH_ENDPOINT
Authorization: Basic $BASE64_ENCODED_CREDENTIALS
Content-Type: application/x-www-form-urlencoded
Accept: application/json

grant_type=client_credentials
OAuth - การตอบกลับจากเซิร์ฟเวอร์การตรวจสอบสิทธิ์ของผู้ให้บริการ

ส่วนหัวการตอบกลับของผู้ให้บริการ

  • Content-Type: FPNV คาดหวังว่าประเภทการตอบกลับจะตรงกับส่วนหัว Accept ของคำขอ
    • กล่าวคือ application/json

ฟิลด์การตอบกลับของผู้ให้บริการ

  • access_token: โทเค็นเพื่อการเข้าถึง OAuth
  • token_type: bearer
  • expires_in: การหมดอายุของโทเค็นเพื่อการเข้าถึง OAuth เป็นวินาที
200 OK
Content-Type: application/json

{
  "access_token": $ACCESS_TOKEN,
  "token_type": "bearer",
  "expires_in": $EXPIRATION_IN_SECS,
}
GetPhoneNumber
GetPhoneNumber - คำขอ POST ไปยัง ECS

เซิร์ฟเวอร์การยืนยันของ Google จะดึงหมายเลขโทรศัพท์โดยใช้การดำเนินการ GetPhoneNumber

ส่วนหัวของคำขอของ FPNV

  • Accept: application/json
  • Content-Type: application/json

ฟิลด์คำขอของ FPNV

  • requestor_id: ระบุบริการที่เรียกใช้การดำเนินการ GetPhoneNumber TS.43
    • UUID การยืนยันหมายเลขโทรศัพท์ของ Firebase: 191fd7cc-f7cd-4bb4-a5d2-455ae1fb9a19
  • temporary_token: TemporaryToken จาก AcquireTempToken
  • access_token: โทเค็น OAuth สำหรับ Google ในการตรวจสอบสิทธิ์กับผู้ให้บริการ
  • terminal_vendor/model/sw_version: FPNV จะป้อนค่าที่กำหนดเองในช่องเหล่านี้
  • entitlement_version: Google จะกำหนดค่าเวอร์ชันการให้สิทธิ์ที่ส่ง ไปยังผู้ให้บริการตามสิ่งที่ผู้ให้บริการร้องขอ
    • โดยปกติ entitlement_version จะเป็น 10.0 หรือ 12.0
  • app: FPNV จะตั้งค่า ap2014
  • app_name: FPNV จะตั้งค่า firebase สำหรับคำขอ FPNV ทั้งหมด
    • หมายเหตุ: AcquireTempToken จะมี app_name เป็น Google-OGI ไม่ว่าจะใช้ผู้รวบรวมข้อมูลใดก็ตาม
  • operation: FPNV จะตั้งค่า GetPhoneNumber
GetPhoneNumber - การตอบกลับจาก ECS

ตัวอย่าง: TS.43 v12.0 - Section 6.6.7 - "GetPhoneNumber Response Example"

ส่วนหัวการตอบกลับของผู้ให้บริการ

  • Content-Type: FPNV คาดหวังว่าประเภทการตอบกลับจะตรงกับส่วนหัว Accept ของคำขอ
    • กล่าวคือ application/json

ฟิลด์การตอบกลับของผู้ให้บริการ

  • ap2014.MSISDN: FPNV คาดหวังให้ส่งคืนหมายเลขโทรศัพท์ในรูปแบบ E164 format
    • JSON จะคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ดังนั้น MSISDN ต้องเป็นตัวพิมพ์ใหญ่
รหัสข้อผิดพลาดของโทเค็นชั่วคราว

ข้อมูลอ้างอิงจาก TS.43 เวอร์ชัน 12.0 ส่วนที่ 2.8.6

ตารางต่อไปนี้แสดงรายละเอียดการตอบกลับที่ล้มเหลวซึ่ง ECS คาดว่าจะส่งคืนไปยังเซิร์ฟเวอร์การยืนยันของ Google สำหรับคำขอ GetPhoneNumber

สถานการณ์

รหัสการตอบกลับ GET/POST จาก ECS

การดำเนินการของเซิร์ฟเวอร์บุคคลที่สาม

พารามิเตอร์ไม่ถูกต้องหรือขาดหายไป หรือรูปแบบในคำขอไม่ถูกต้อง

400 คำขอไม่ถูกต้อง

ลองอีกครั้งเมื่อผู้ใช้เรียกใช้ครั้งถัดไป / หลังจากรีสตาร์ทไคลเอ็นต์

โทเค็นชั่วคราวในคำขอไม่ถูกต้องหรือหมดอายุ

401 ไม่ได้รับอนุญาต

หากเป็นไปได้ ให้ทริกเกอร์อุปกรณ์เพื่อรับโทเค็นชั่วคราวที่ถูกต้อง (ใหม่) จาก ECS

การดำเนินการไม่ถูกต้องเมื่อใช้ร่วมกับโทเค็นชั่วคราว

403 ต้องห้าม

ลองอีกครั้งเมื่อผู้ใช้เรียกใช้ครั้งถัดไป / หลังจากรีสตาร์ทไคลเอ็นต์

ไม่พบทรัพยากรที่ขอ

404 ไม่พบ

ลองอีกครั้งเมื่อผู้ใช้เรียกใช้ครั้งถัดไป / หลังจากรีสตาร์ทไคลเอ็นต์

ECS พบข้อผิดพลาดภายในระหว่างการประมวลผลคำขอ

500 ข้อผิดพลาดภายในเซิร์ฟเวอร์

ลองอีกครั้งเมื่อผู้ใช้เรียกใช้ครั้งถัดไป / หลังจากรีสตาร์ทไคลเอ็นต์

ตัวเลือกที่ 2 - CAMARA

แผนภาพแสดงเซิร์ฟเวอร์ของ Google แลกเปลี่ยนโทเค็นชั่วคราวสำหรับหมายเลขโทรศัพท์ที่ยืนยันแล้วกับผู้ให้บริการโดยใช้โฟลว์ผู้ถือ JWT ของ CAMARA
รูปที่ 2ข. จากนั้นเซิร์ฟเวอร์ของ Google จะส่ง TempToken ไปยังผู้ให้บริการเพื่อแลกกับโทรศัพท์ที่ยืนยันแล้วโดยใช้โฟลว์ผู้ถือ JWT ของ CAMARA แผนภาพนี้สรุปขั้นตอนที่ 1 - EAP-AKA / AcquireTempToken

ปลายทาง: การดึงโทเค็นเพื่อการเข้าถึง CAMARA และการดึงหมายเลขโทรศัพท์อาจใช้เซิร์ฟเวอร์/ปลายทางที่แตกต่างกัน นอกจากนี้ ปลายทางเหล่านี้ยังอาจแตกต่างจากปลายทาง EAP-AKA / AcquireTempToken ด้วย

OAuth - ดึงโทเค็นเพื่อการเข้าถึง CAMARA

Google จะรองรับเฉพาะโฟลว์ผู้ถือ JWT ของ CAMARA และไม่รองรับโฟลว์ CIBA

โทเค็นเพื่อการเข้าถึง CAMARA - คำขอ POST ไปยังผู้ให้บริการ

Google จะสร้าง JWT ที่มีฟิลด์ต่อไปนี้

  • iss: ผู้ออก JWT (หรือที่เรียกว่ารหัสไคลเอ็นต์)
    • เช่น firebase (การผสานรวม FPNV จริง) หรือ fpnv-carrier-tester-app (แอปทดสอบของผู้ให้บริการ)
  • sub: เรื่องของ JWT
    • กล่าวคือ operatortoken:$TEMP_TOKEN
  • aud: กลุ่มเป้าหมาย ผู้รับที่ JWT มีไว้สำหรับ
    • URL ปลายทางของโทเค็น (เช่น URL ของเซิร์ฟเวอร์การให้สิทธิ์)
  • exp: เวลาหมดอายุเป็นวินาที
    • Google จะส่งระยะเวลาการหมดอายุที่ตรงกับระยะเวลาที่ควรใช้ได้ของโทเค็นเพื่อการเข้าถึง CAMARA (ดูข้อกำหนดทางเทคนิค)
  • iat: ออก ณ เวลาเป็นวินาที
  • jti: ตัวระบุที่ไม่ซ้ำเพื่อหลีกเลี่ยงการโจมตีแบบเล่นซ้ำ
    • เช่น UUID ที่สร้างขึ้นแบบสุ่ม
  • scope: วัตถุประสงค์ของคำขอ
    • กล่าวคือ dpv:FraudPreventionAndDetection number-verification:device-phone-number:read
{
  "iss": "firebase",
  "sub": "operatortoken:ey...",
  "aud": $OAUTH_ENDPOINT,
  "exp": $EXPIRATION_TIME_IN_SECS,
  "iat": $ISSUED_AT_TIME_IN_SECS,
  "jti": $RANDOMLY_GENERATED_UUID,
  "scope": "dpv:FraudPreventionAndDetection number-verification:device-phone-number:read"
}

FPNV จะลงชื่อ JWT โดยใช้คีย์ส่วนตัวของตนเอง และผู้ให้บริการสามารถตรวจสอบ JWT โดยใช้คีย์สาธารณะที่เกี่ยวข้องได้ FPNV จะระบุคีย์สาธารณะ โดยใช้ปลายทาง JWKS ผู้ให้บริการควรสำรวจข้อมูลปลายทาง JWKS นี้เป็นประจำเพื่อหาคีย์สาธารณะ (เช่น วันละครั้ง) เนื่องจาก FPNV จะหมุนเวียนคีย์สาธารณะตามช่วงเวลาปกติ (เช่น ทุกๆ 30 วัน)

ส่วนหัวของคำขอของ FPNV

  • Content-Type: application/x-www-form-urlencoded
  • Accept: application/json

ฟิลด์คำขอของ FPNV

  • grant_type: urn:ietf:params:oauth:grant-type:jwt-bearer
  • assertion: JWT ที่สร้างขึ้นด้านบนและลงนามด้วยคีย์ส่วนตัวของ FPNV
    • โปรดทราบว่า JWT นี้มี TempToken
POST /token.oauth2 HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded
Accept: application/json

grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
&assertion=$JWT
โทเค็นเพื่อการเข้าถึง CAMARA - การตอบกลับจากผู้ให้บริการ

ส่วนหัวการตอบกลับของผู้ให้บริการ

  • Content-Type: FPNV คาดหวังว่าประเภทการตอบกลับจะตรงกับส่วนหัว Accept ของคำขอ
    • กล่าวคือ application/json

ฟิลด์การตอบกลับของผู้ให้บริการ

  • access_token: โทเค็นเพื่อการเข้าถึง CAMARA ซึ่งสามารถแลกเป็น หมายเลขโทรศัพท์ได้ในภายหลัง
  • token_type: bearer
  • expires_in: การหมดอายุของโทเค็นเพื่อการเข้าถึง OAuth เป็นวินาที
  • scope: วัตถุประสงค์ของคำขอ
    • กล่าวคือ dpv:FraudPreventionAndDetection number-verification:device-phone-number:read
200 OK
Content-Type: application/json

{
  "access_token": $CAMARA_ACCESS_TOKEN,
  "token_type": "bearer",
  "expires_in": $EXPIRATION_IN_SECS,
  "scope": "dpv:FraudPreventionAndDetection number-verification:device-phone-number:read"
}
CAMARA NumberVerification API v2

จากนั้น Google จะแลกเปลี่ยนโทเค็นเพื่อการเข้าถึง CAMARA โดยส่งคำขอ GET ไปยังปลายทาง /device-phone-number ของผู้ให้บริการ

CAMARA NumberVerification - คำขอ GET ไปยังผู้ให้บริการ

ส่วนหัวของคำขอของ FPNV

  • Authorization: Bearer $CAMARA_ACCESS_TOKEN
  • Accept: application/json
GET /device-phone-number
Authorization: Bearer $CAMARA_ACCESS_TOKEN
Accept: application/json
Content-Type: application/json
CAMARA NumberVerification - Response from Carrier

ส่วนหัวการตอบกลับของผู้ให้บริการ

  • Content-Type: FPNV คาดหวังว่าประเภทการตอบกลับจะตรงกับส่วนหัว Accept ของคำขอ
    • กล่าวคือ application/json

ฟิลด์การตอบกลับของผู้ให้บริการ

  • devicePhoneNumber: แสดงผลหมายเลขโทรศัพท์ในรูปแบบ E164
200 OK
Content-Type: application/json

{
 "devicePhoneNumber": $PHONE_NUMBER
}