ลงชื่อเข้าใช้ Apple วิธีอนุญาตจะส่งคืนชื่อในครั้งแรกเท่านั้น

Aug 20 2020

ใช้การลงชื่อเข้าใช้ Apple ในเว็บแอป (ASP.NET แบบเก่า แต่ไม่สำคัญคำถามสามารถถือว่าเป็น HTML / JS POC แบบธรรมดา) วิธีการโทรได้รับอนุญาตบนอุปกรณ์ปลายทางของ Apple:

https://appleid.apple.com/auth/authorize?client_id=...&redirect_uri=...&response_type=code%20id_token&state=...&response_mode=form_post&scope=name%20email

ฉันต้องการรับชื่อและนามสกุลของผู้ใช้ เมธอดจะคืนค่าดังนี้: {

   "state": "xxx",
   "code": "yyy",
   "id_token": "zzz",
   "user": {
        "name": {
            "firstName":"John",
            "lastName":"Doe"
        },
        "email":"[email protected]"
    }
}

id_token คือ JWT ซึ่งประกอบด้วย apple ID และอีเมลของผู้ใช้ไม่มีข้อมูลเกี่ยวกับชื่อหรือนามสกุล

อย่างที่คุณเห็นฉันสามารถรับชื่อและนามสกุลจากคุณสมบัติของผู้ใช้ นั่นเป็นวิธีเดียวที่ฉันรู้จัก

ปัญหาคือ Apple ส่งคืนข้อมูลนี้ในครั้งแรกที่ฉันร้องขอเท่านั้น ไม่ใช่ข้อบกพร่อง แต่เป็นคุณสมบัติ:https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_js/configuring_your_webpage_for_sign_in_with_apple :

สำคัญ

Apple ส่งคืนวัตถุของผู้ใช้ในครั้งแรกที่ผู้ใช้อนุญาตแอปเท่านั้น เก็บข้อมูลนี้ไว้จากแอปของคุณ คำขอการอนุญาตที่ตามมาจะไม่มีวัตถุผู้ใช้

ดังนั้นฉันจึงเก็บข้อมูลนี้ไว้ในเวิร์กโฟลว์ในภายหลังฉันจะเก็บไว้ในฐานข้อมูล

ตอนนี้ปัญหา / คำถามของฉัน:

เมื่อผู้ใช้ลบบัญชีฉันจะลบข้อมูลทั้งหมดออกจากฐานข้อมูล (ฉันต้องทำเพราะสัญญากฎหมาย ฯลฯ )

เมื่อผู้ใช้ลงทะเบียนอีกครั้งผ่านการลงชื่อเข้าใช้ Apple ฉัน ping ตำแหน่งปลายทางของ Apple และฉันไม่ได้รับข้อมูลผู้ใช้ (รวมถึงชื่อและนามสกุล) อีกต่อไป (เนื่องจากนโยบายของ Apple ที่อ้างไว้ข้างต้น)!

ฉันควรทำอย่างไรเพื่อให้ได้มา

คำตอบ

3 AnkitMishra Aug 28 2020 at 09:57

ฉันกำลังทำส่วนแบ็คเอนด์การลงชื่อเข้าใช้แอปเปิ้ลประสบปัญหาที่คล้ายกัน

สำหรับ IOS 13+

  • SDK ให้ uuid ผู้ใช้ apple อีเมลและชื่อสำหรับคำขออนุญาตครั้งแรก
  • เรากำลังทำแผนที่ apple_user_uuid ที่ไม่ซ้ำกันนี้กับรายละเอียดโปรไฟล์ใน DB (ในกรณีที่คำขอล้มเหลวคุณสามารถขอให้แบ็คเอนด์วางสิ่งนี้ในคิวและแอพควรเก็บสิ่งนี้ไว้ในแคชจนกว่าการโทรแบ็คเอนด์จะสำเร็จ)

สำหรับ ANDROID / WEB Flow / IOS ต่ำกว่า 13

  • เป็นครั้งแรกในการโทรกลับของ apple มันจะส่งชื่อเราพร้อมรหัสครั้งเดียว (หมดอายุ 5 นาที)

  • การใช้รหัสนี้เมื่อเราเรียกโทเค็น API จะให้ id_token JWT แก่เรา

  • ในโทเค็นหัวเรื่องคือ apple_user_uuid

  • คงอยู่ในตารางเดียวกัน

ดังนั้นในส่วนแบ็คเอนด์คุณจะมีอีเมล firstName, lastName ติดแท็กด้วย apple_user_uuid ซึ่งจะคงที่สำหรับ apple id

และอย่าลบการแมปนี้หากผู้ใช้ลบบัญชีของคุณ จนกว่า Apple จะให้การแก้ไข