ตั้งค่าการแชร์ข้อมูลเข้าสู่ระบบอย่างราบรื่นในเว็บไซต์และแอป Android

1. ภาพรวม

ผู้ใช้เข้าถึงบริการของคุณทั้งในเว็บไซต์และแอป Android หรือไม่ การบังคับให้ผู้ใช้ลงชื่อเข้าใช้แยกกันในแต่ละแพลตฟอร์มจะสร้างอุปสรรคที่ไม่จำเป็นและอาจทำให้ผู้ใช้ทำไม่สำเร็จ

ลิงก์เนื้อหาดิจิทัล (DAL) ช่วยแก้ปัญหานี้ด้วยการให้คุณประกาศการเชื่อมโยงระหว่างเว็บไซต์กับแอป ซึ่งจะช่วยให้เครื่องมือจัดการรหัสผ่าน เช่น เครื่องมือจัดการรหัสผ่านบน Google แชร์รหัสผ่านและพาสคีย์ที่บันทึกไว้ระหว่างกันได้

โดยเฉพาะอย่างยิ่ง การกำหนดค่าไฟล์ลิงก์เนื้อหาดิจิทัลต้องใช้ความสัมพันธ์ที่แตกต่างกันไปตามสิ่งที่คุณต้องการแชร์ ดังนี้

  • สำหรับรหัสผ่าน: การรวม delegate_permission/common.get_login_creds จะช่วยให้เครื่องมือจัดการรหัสผ่านแชร์รหัสผ่านที่บันทึกไว้ระหว่างเว็บไซต์และแอปได้
  • สำหรับพาสคีย์: เนื่องจากพาสคีย์เชื่อมโยงกับโดเมนเว็บที่เฉพาะเจาะจงอย่างเคร่งครัด Android จึงกำหนดให้ต้องมีหลักฐานแสดงความเป็นเจ้าของโดเมน ดังนั้นคุณต้องใส่ delegate_permission/common.handle_all_urls แม้ว่าคุณอาจรู้จักสิทธิ์นี้ในฐานะสิทธิ์ที่ใช้สำหรับ Android App Links (Deep Link) แต่ก็ยังเป็นข้อกำหนดที่เข้มงวดในการอนุญาตให้ใช้พาสคีย์ที่สร้างในแพลตฟอร์มหนึ่งในอีกแพลตฟอร์มหนึ่งด้วย

ผลลัพธ์ที่ได้ก็คือ ผู้ใช้จะลงชื่อเข้าใช้แพลตฟอร์มในเครือได้อย่างราบรื่นโดยใช้รหัสผ่านหรือพาสคีย์ที่บันทึกไว้สำหรับแพลตฟอร์มใดแพลตฟอร์มหนึ่ง

รหัสผ่านที่ใช้ได้ในพร็อพเพอร์ตี้ต่างๆ

การใช้การแชร์ข้อมูลเข้าสู่ระบบอย่างราบรื่นจะช่วยปรับปรุงประสบการณ์ของผู้ใช้ได้อย่างมาก ตัวอย่างเช่น eBay มีการลงชื่อเข้าใช้สำเร็จเพิ่มขึ้น 10% หลังจากใช้ DAL สำหรับการแชร์ข้อมูลเข้าสู่ระบบ

ใน Codelab นี้ คุณจะได้เรียนรู้วิธีใช้ลิงก์เนื้อหาดิจิทัล (Digital Asset Links) เพื่อเปิดใช้การแชร์ข้อมูลเข้าสู่ระบบระหว่างเว็บไซต์กับแอป Android

ข้อกำหนดเบื้องต้น

สิ่งที่คุณจะได้เรียนรู้

  • วิธีตั้งค่าการแชร์ข้อมูลเข้าสู่ระบบโดยใช้ Google Play Console (แนะนํา)
  • วิธีสร้างไฟล์ assetlinks.json ด้วยตนเอง
  • วิธีกำหนดค่าแอป Android สำหรับการเชื่อมโยงด้วยตนเอง
  • วิธีเปิดใช้พาสคีย์ในแอป Android โดยการเชื่อมโยงกับโดเมนเว็บไซต์
  • วิธีใช้เครื่องมือเพื่อสร้างและตรวจสอบการตั้งค่า

สิ่งที่คุณต้องมี

  • เว็บไซต์: ความสามารถในการโฮสต์ไฟล์ JSON ที่ https://{your-domain}/.well-known/assetlinks.json
  • แอป Android:
    • สำหรับวิธี Play Console: แอปที่เผยแพร่ใน Google Play
    • สำหรับวิธีการด้วยตนเอง: โปรเจ็กต์ Android ที่คุณแก้ไขและสร้างได้ โปรดทราบว่าหากต้องการให้การแชร์ข้อมูลเข้าสู่ระบบกับเครื่องมือจัดการรหัสผ่านบน Google ทำงานได้ คุณต้องเผยแพร่แอปใน Google Play

วิธีการทำงาน

หากต้องการให้การแชร์ข้อมูลเข้าสู่ระบบทำงานได้ คุณต้องสร้างความน่าเชื่อถือแบบ 2 ทาง ดังนี้

  1. เว็บ -> แอป: เว็บไซต์ของคุณต้องโฮสต์ไฟล์ assetlinks.json ที่ประกาศว่าเชื่อถือแอป Android ของคุณ
  2. แอป -> เว็บ: ต้องกำหนดค่าแอป Android ให้เชื่อถือเว็บไซต์

เราจะอธิบาย 2 วิธีในการดำเนินการนี้ ได้แก่ วิธีอัตโนมัติโดยใช้ Google Play Console (แนะนำ) และวิธีด้วยตนเองโดยใช้ ลิงก์เนื้อหาดิจิทัล (Digital Asset Links) โดยตรง

2. ตั้งค่าโดยใช้ Google Play Console (แนะนำ)

วิธีที่ง่ายที่สุดในการเปิดใช้การแชร์ข้อมูลเข้าสู่ระบบระหว่างเว็บไซต์กับแอป Android คือการใช้ Google Play Console วิธีนี้ช่วยให้คุณเชื่อมโยงแอปกับเว็บไซต์ได้โดยไม่ต้องแก้ไขไฟล์ Manifest ของแอปหรือเผยแพร่แอปเวอร์ชันใหม่ Google Play จะจัดการการเชื่อมโยงฝั่งแอปให้คุณ

ข้อกำหนดเบื้องต้น

  • สิทธิ์ของ Play Console ในการเข้าถึงหน้า Deep Link
  • ความสามารถในการเผยแพร่ไฟล์ /.well-known/assetlinks.json ในโดเมน

ดูข้อมูลเพิ่มเติมเกี่ยวกับ Deep Link ได้ที่ Android App Link

ขั้นตอน

  1. ใน Play Console ให้ไปที่ขยายการมองเห็น > Deep Link
  2. หากโดเมนไม่อยู่ในรายการ ให้คลิกเพิ่มโดเมนในส่วนการกำหนดค่าแอป
  3. ค้นหาโดเมนและมองหาคอลัมน์การแชร์ข้อมูลเข้าสู่ระบบ คลิกเปิด (หรือตรวจสอบว่าได้เปิดเปิดใช้การแชร์ข้อมูลเข้าสู่ระบบสำหรับโดเมนใหม่แล้ว)
  4. คัดลอกข้อมูลโค้ด JSON ที่ Play Console สร้างขึ้น
  5. เผยแพร่เนื้อหา JSON นี้ไปยัง https://{your-domain}/.well-known/assetlinks.json (หากมีไฟล์นี้อยู่แล้ว ให้เพิ่มข้อความใหม่ต่อท้าย)
  6. กลับไปที่ Play Console แล้วคลิกสร้างการเชื่อมโยงเว็บไซต์หรือเปิดการแชร์ข้อมูลเข้าสู่ระบบ

ตอนนี้ Play Console จะยืนยันการตั้งค่าโฮสติ้ง

Deep Link ของ Play Console

โฮสต์เว็บไซต์ของคุณต้องมีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้จึงจะแชร์ข้อมูลเข้าสู่ระบบได้

  • URL เข้าถึงได้ผ่าน HTTPS
  • เซิร์ฟเวอร์ตอบกลับด้วย Content-Type: application/json
  • URL เข้าถึงได้โดยไม่ต้องเปลี่ยนเส้นทาง

เมื่อยืนยันแล้ว การแชร์ข้อมูลเข้าสู่ระบบจะเปิดใช้งาน การเปลี่ยนแปลงการกำหนดค่าอาจใช้เวลา 1-2 สัปดาห์จึงจะมีผล

3. ตั้งค่าด้วยตนเองโดยใช้ลิงก์เนื้อหาดิจิทัล

ต้องการการควบคุมเพิ่มเติมหรือไม่ หรือไม่มีสิทธิ์เข้าถึง Play Console คุณกำหนดค่าการแชร์ข้อมูลเข้าสู่ระบบระหว่างเว็บไซต์กับแอป Android ได้ด้วยตนเอง ซึ่งมีงานหลัก 2 อย่าง ได้แก่ การฝากไฟล์ JSON ในเว็บไซต์และการอัปเดตไฟล์ Manifest ของแอป Android

1. รับลายนิ้วมือดิจิทัลของแอป

ก่อนตั้งค่าการแชร์ข้อมูลเข้าสู่ระบบอย่างราบรื่น โปรดตรวจสอบว่าคุณมีสิ่งต่อไปนี้สำหรับแต่ละแพลตฟอร์ม

สำหรับแอป Android แต่ละแอป

2. สร้างไฟล์การเชื่อมโยง

คุณต้องสร้างไฟล์ assetlinks.json ที่ประกาศความสัมพันธ์ระหว่างเว็บไซต์กับแอป ใช้ delegate_permission/common.get_login_creds เพื่อให้สิทธิ์ในการแชร์รหัสผ่าน และ delegate_permission/common.handle_all_urls เพื่อเปิดใช้ Deep Link และแชร์พาสคีย์

สร้างไฟล์ชื่อ assetlinks.json ที่มีเนื้อหาต่อไปนี้ แทนที่ค่าตัวอย่างด้วย URL ของเว็บไซต์ ชื่อแพ็กเกจ และลายนิ้วมือของคุณเอง

[{
  "relation": [
    "delegate_permission/common.handle_all_urls",
    "delegate_permission/common.get_login_creds"
    ],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example.app",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
}]

3. ฝากไฟล์

อัปโหลดไฟล์ assetlinks.json ไปยังไดเรกทอรี .well-known ที่รูทของโดเมน

สถานที่: https://{your-domain}/.well-known/assetlinks.json

โฮสต์เว็บไซต์ของคุณต้องมีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้จึงจะแชร์ข้อมูลเข้าสู่ระบบได้

  • URL เข้าถึงได้ผ่าน HTTPS
  • เซิร์ฟเวอร์ตอบกลับด้วย Content-Type: application/json
  • URL เข้าถึงได้โดยไม่ต้องเปลี่ยนเส้นทาง

เว็บไปยังแอป

4. กำหนดค่าแอป Android

ตอนนี้ให้บอกแอป Android ให้เชื่อถือเว็บไซต์ คุณจะเพิ่มการอ้างอิงในไฟล์ Manifest ที่นำไปยังไฟล์ทรัพยากรซึ่งมี assetlinks.json URL

1. เพิ่มทรัพยากรสตริง

ใน res/values/strings.xml ให้เพิ่มสตริงใหม่ asset_statements โปรดสังเกตเครื่องหมายคำพูดที่กำหนดเป็นอักขระหลีก

<resources>
    <string name="asset_statements" translatable="false">
      [{
        \"include\": \"https://www.example.com/.well-known/assetlinks.json\"
      }]
    </string>
</resources>

2. เพิ่มข้อมูลเมตาลงในไฟล์ Manifest

ใน AndroidManifest.xml ให้เพิ่มแท็ก <meta-data> ภายในองค์ประกอบ <application> ที่อ้างอิงทรัพยากรสตริงนี้

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.app">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">

        <meta-data
            android:name="asset_statements"
            android:resource="@string/asset_statements" />

        <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    </manifest>

หลังจากทำตามขั้นตอนเหล่านี้และเผยแพร่แอป Android เวอร์ชันใหม่แล้ว เครื่องมือจัดการรหัสผ่านที่รองรับลิงก์เนื้อหาดิจิทัล (Digital Asset Links) (เช่น เครื่องมือจัดการรหัสผ่านบน Google) จะแนะนำข้อมูลเข้าสู่ระบบที่บันทึกไว้สำหรับ www.example.com เมื่อผู้ใช้พยายามลงชื่อเข้าใช้ com.example.app และในทางกลับกัน

4. ตรวจสอบการตั้งค่า

ก่อนที่จะจัดส่ง คุณต้องยืนยันการกำหนดค่า Digital Asset Links JSON ไม่ถูกต้องหรือไฟล์ที่เข้าถึงไม่ได้จะล้มเหลวโดยไม่มีข้อความแจ้ง

ใช้เครื่องมือเครื่องมือสร้างและตรวจสอบใบแจ้งยอดอย่างเป็นทางการ

เครื่องมือสร้างและตรวจสอบใบแจ้งยอด

  1. ป้อนโดเมนของเว็บไซต์และชื่อแพ็กเกจของแอป
  2. คลิกทดสอบใบแจ้งยอด
  3. เครื่องมือจะตรวจสอบว่ามีการโฮสต์ไฟล์ assetlinks.json อย่างถูกต้องและมีการเชื่อมโยงที่ถูกต้อง

5. การแชร์ข้อมูลเข้าสู่ระบบระหว่างเว็บไซต์หลายแห่ง

เว็บไปยังแอป

หากคุณมีเว็บไซต์หลายแห่งที่ใช้ระบบการเข้าสู่ระบบเดียวกัน (เช่น example.com และ example.co.uk) คุณสามารถประกาศให้เว็บไซต์เหล่านั้นเป็นเว็บไซต์ในเครือเพื่อให้แชร์ข้อมูลเข้าสู่ระบบระหว่างกันได้

แชร์รหัสผ่านระหว่างเว็บไซต์หลายแห่ง

หากต้องการแชร์รหัสผ่านระหว่างเว็บไซต์ คุณสามารถประกาศการเชื่อมโยงแบบweb-ต่อ-webได้โดยใช้ delegate_permission/common.get_login_creds

เช่น หาก example.com ต้องการแชร์รหัสผ่านกับ example.co.uk ไฟล์ assetlinks.json ที่โฮสต์ใน https://example.com/.well-known/assetlinks.json ต้องมีข้อความที่กำหนดเป้าหมายเป็น example.co.uk

[{
  "relation": ["delegate_permission/common.get_login_creds"],
  "target": {
    "namespace": "web",
    "site": "https://example.co.uk"
  }
}]

ในทำนองเดียวกัน https://example.co.uk/.well-known/assetlinks.json ต้องมีข้อความที่กำหนดเป้าหมาย example.com

แชร์พาสคีย์ระหว่างหลายเว็บไซต์

หากต้องการอนุญาตให้หลายเว็บไซต์แชร์พาสคีย์เดียวกัน เว็บไซต์เหล่านั้นต้องใช้รหัสผู้ให้บริการ (RP ID) เดียวกัน ใน WebAuthn และพาสคีย์ รหัส RP จะระบุขอบเขตของข้อมูลเข้าสู่ระบบตามชื่อโดเมน เมื่อสร้างพาสคีย์ ระบบจะเชื่อมโยงพาสคีย์กับ RP ID ที่เฉพาะเจาะจง และจะใช้ได้เฉพาะในโดเมนที่อยู่ในขอบเขตของรหัสนั้น การกำหนดรหัส RP อย่างถูกต้องจะช่วยให้มั่นใจได้ถึงประสบการณ์การใช้งานพาสคีย์ที่ราบรื่นในโดเมนย่อย ต้นทางข้ามเว็บไซต์ และแอปบนอุปกรณ์เคลื่อนที่ของบุคคลที่หนึ่ง ดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่ารหัส RP ได้ที่ทำความเข้าใจรหัส Relying Party (รหัส RP) คำขอต้นทางที่เกี่ยวข้องช่วยให้เว็บไซต์หนึ่งระบุต้นทางอื่นๆ ที่ได้รับอนุญาตให้ใช้รหัส RP ของตนได้ ซึ่งจะช่วยให้ผู้ใช้ใช้พาสคีย์เดียวกันซ้ำในหลายเว็บไซต์ที่คุณดำเนินการได้ โปรดทราบว่าการดำเนินการนี้แตกต่างจากการแชร์พาสคีย์ระหว่างเว็บไซต์กับแอป Android ซึ่งใช้ delegate_permission/common.handle_all_urls ในลิงก์เนื้อหาดิจิทัล

ตัวอย่างเช่น หากต้องการให้ example.com และ example.co.uk แชร์พาสคีย์ คุณสามารถกำหนดให้ example.com เป็นรหัส RP ที่เป็น Canonical ได้ หากต้องการให้ฟีเจอร์นี้ทำงานได้ example.co.uk ต้องใช้ rpId: 'example.com' ในการเรียก WebAuthn API และ example.com ต้องโฮสต์ไฟล์ที่ https://example.com/.well-known/webauthn เพื่อเพิ่ม example.co.uk ลงในรายการที่อนุญาต

{
  "origins": [
    "https://example.co.uk"
  ]
}

ซึ่งจะช่วยให้ example.co.uk สร้างและใช้พาสคีย์ที่เชื่อมโยงกับ example.com ได้

6. บทสรุป

ยินดีด้วย คุณตั้งค่าการแชร์ข้อมูลเข้าสู่ระบบอย่างราบรื่นเรียบร้อยแล้ว

ตอนนี้ผู้ใช้สามารถบันทึกรหัสผ่านและพาสคีย์ในเว็บไซต์ของคุณ และใช้เพื่อลงชื่อเข้าใช้แอป Android ได้ด้วยการแตะเพียงครั้งเดียว (และในทางกลับกัน) การเปลี่ยนแปลงง่ายๆ นี้จะช่วยเพิ่มอัตรา Conversion ของการลงชื่อเข้าใช้และความพึงพอใจของผู้ใช้ได้อย่างมาก

ขั้นตอนต่อไปคืออะไร