คู่มือการผสานรวมตัวควบคุมข้อจำกัดการแก้ไขข้อบกพร่อง

ทําตามวิธีการในหน้านี้เพื่อผสานรวมตัวควบคุมข้อจํากัดการแก้ไขข้อบกพร่อง AAOS (DRC)

รูปที่ 1 ตัวอย่างแอป DRC

สถาปัตยกรรม

แสดงสถาปัตยกรรม DRC ในรูปที่ 2 คอมโพเนนต์ที่ระบุเป็นสีแดง (ผู้ออกโทเค็นและ DRC) จะมีการติดตั้งใช้งานข้อมูลอ้างอิงที่คุณปรับแต่งได้

รูปที่ 2 สถาปัตยกรรม DRC

สาธารณรัฐประชาธิปไตยประชาชน คืออะไร

เครื่องเล่นวิทยุของรถยนต์ประกอบด้วยแอป DRC (ดูการใช้งานข้อมูลอ้างอิงใน packages/apps/Car/DebuggingRestrictionController) แอปข้อมูลอ้างอิงประกอบด้วย ตรรกะสำหรับการรับโทเค็นเพื่อการเข้าถึงจากผู้ออกโทเค็น การตรวจสอบโทเค็น และ จากนั้นจึงใช้การเปลี่ยนแปลงข้อจำกัดการแก้ไขข้อบกพร่องตามที่ระบุในโทเค็น ตรรกะประกอบด้วย องค์ประกอบ UX พื้นฐาน ในฝั่งรถยนต์

ผู้ออกโทเค็นคืออะไร

นี่คือบริการบนเว็บที่ออกโทเค็นเพื่อการเข้าถึงที่ลงชื่อแบบเข้ารหัส (ดูข้อมูลอ้างอิง ใน packages/apps/Car/DebuggingRestrictionController/server) บริการเว็บอ้างอิงเป็นฟังก์ชัน Firebase Cloud ที่สามารถทำให้ใช้งานได้ (ดูข้อมูลเพิ่มเติมได้ที่ ฟังก์ชันระบบคลาวด์สำหรับ Firebase)

สิ่งที่ต้องมีก่อน

ก่อนที่จะทำให้การใช้งานข้อมูลอ้างอิงใช้งานได้ โปรดทำงานต่อไปนี้ให้เสร็จสิ้น

เตรียมใบรับรองเพื่อลงนามโทเค็นเพื่อการเข้าถึง

ผู้ออกโทเค็นสร้าง JSON Web Signatures (JWS) เป็นโทเค็นเพื่อการเข้าถึง เพื่อประสิทธิภาพสูงสุด ผู้ออกข้อมูลอ้างอิงรองรับเฉพาะอัลกอริทึม RS256 (ลายเซ็น RSA ที่มี SHA256) ใช้เชนใบรับรองแทนใบรับรองเดี่ยวเพื่อลงนามเพื่อช่วยให้การหมุนเวียนคีย์ง่ายขึ้น โทเค็นเพื่อการเข้าถึง ชุดใบรับรองทั่วไปควรประกอบด้วยใบรับรอง CA ระดับรูท และ ใบรับรอง CA ระดับกลาง และใบรับรองเอนทิตีปลายทาง

ใบรับรองเอนทิตีปลายทางที่ลงนามโทเค็น JWS ไม่แตกต่างจาก TLS มาตรฐาน ใบรับรอง คุณสามารถซื้อใบรับรองจาก CA สาธารณะ เช่น DigiCert หรือ ชุดใบรับรองของคุณเองโดยใช้ใบรับรอง CA รูทที่ลงชื่อด้วยตนเองหรือโมดูลความปลอดภัยของฮาร์ดแวร์ ใบรับรองเอนทิตีปลายทางควรเป็นใบรับรอง X509v3 ที่มีชื่อสำรองของหัวเรื่อง (SAN) ส่วนขยาย SAN มีตัวระบุ (เช่น ชื่อโฮสต์) ของโทเค็น ผู้ออกบัตร ข้อสุดท้าย ควรใช้ใบรับรอง RSA มากกว่าใบรับรอง EC เนื่องจากโทเค็น ผู้ออกบัตรรองรับเฉพาะ RS256

Google มีสคริปต์เชลล์สำหรับการสร้างใบรับรองที่ลงชื่อด้วยตนเองใน packages/apps/Car/DebuggingRestrictionController/server/genkey.sh

ตั้งค่า Firebase

ผู้ออกโทเค็นอ้างอิงใช้ การตรวจสอบสิทธิ์ Firebase และ Firebase Cloud Function

วิธีตั้งค่าบัญชี Firebase

  1. หากต้องการสร้างโปรเจ็กต์ Firebase ให้ดู เพิ่ม Firebase ไปยัง โปรเจ็กต์ Android ของคุณ
  2. หากต้องการเปิดใช้ตัวตรวจสอบสิทธิ์ Firebase บางรายการ โปรดดู ฉันต้อง เริ่มต้นด้วยการตรวจสอบสิทธิ์ Firebase ไหม
  3. หากต้องการเพิ่มฟังก์ชัน Firebase Cloud ที่ว่างเปล่า โปรดดู รับ เริ่มต้นแล้ว
  4. หากยังไม่ได้ดำเนินการ ให้ติดตั้งเครื่องมือ Node.js, NPM และ Firebase เพื่อรวบรวมและ ติดตั้งใช้งานผู้ออกโทเค็น

ผสานรวมแอป DRC

แอป DRC อ้างอิงอยู่ใน packages/apps/Car/DebuggingRestrictionController สามารถสร้างแอป bundle [แพ็กเกจ] ใน AOSP กับ Soong หรือ เลิกรวมกลุ่มกับ Gradle

บิลด์แบบรวม

วิธีสร้างแอปที่รวมแพ็กเกจมีดังนี้

  1. คัดลอก applicationId, projectId และ apiKey จาก google-services.json เป็นภาษา packages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java การทำเช่นนี้จะช่วยให้แอป DRC เชื่อมต่อกับ Firebase ได้อย่างถูกต้อง
  2. อัปเดตค่าคงที่เหล่านี้ใน packages/apps/Car/DebuggingRestrictionController/soong/BuildConfig.java:
    • TOKEN_USES_SELF_SIGNED_CA จะระบุว่าใบรับรอง CA รูทที่ลงชื่อด้วยตนเองคือ หากเปิดใช้ แอป DRC จะเชื่อถือเฉพาะใบรับรองรูทที่เข้ารหัสด้วย PEM ที่ระบุไว้ใน ROOT_CA_CERT
    • TOKEN_ISSUER_API_NAME คือชื่อของฟังก์ชัน Firebase Cloud และควร ตรงกับฟังก์ชันระบบคลาวด์ที่คุณสร้างไว้ก่อนหน้านี้ในคอนโซล Firebase
    • TOKEN_ISSUER_HOSTNAME ควรตรงกับชื่อสำรองของเรื่องใน ใบรับรองเอนทิตีปลายทางที่จะลงนามโทเค็นเพื่อการเข้าถึง
    • DRC_TEST_EMAIL และ DRC_TEST_PASSWORD เป็นข้อมูลเข้าสู่ระบบสำหรับ บัญชีทดสอบที่ไม่บังคับ ซึ่งจัดสรรไว้ล่วงหน้าใน Firebase ได้หากคุณเปิดใช้ การลงชื่อเข้าใช้อีเมล/รหัสผ่าน ซึ่งจะใช้สำหรับการทดสอบแบบมีเครื่องวัดเท่านั้น

ตอนนี้แอปได้รับการกำหนดค่าให้ใช้บัญชี Firebase และใบรับรองของคุณแล้ว ใน Android 9 ขึ้นไป คุณต้องตั้งค่า รายการที่อนุญาตสำหรับการให้สิทธิ์ รายการที่อนุญาตต้องมีอย่างน้อย android.permission.MANAGE_USERS เช่น

<permissions>
  <privapp-permissions package="com.android.car.debuggingrestrictioncontroller">
    <permission name="android.permission.INTERNET"/>
    <permission name="android.permission.MANAGE_USERS"/>
  </privapp-permissions>
</permissions>

บิลด์ที่ไม่ได้จัดกลุ่ม

บิลด์ DRC ที่ไม่ได้รวมกลุ่มจะใช้ Gradle เพื่อคอมไพล์แอป

วิธีสร้างบิลด์ที่ไม่ได้รวมกลุ่ม

  1. ตรวจสอบว่าคุณได้ติดตั้ง Android SDK แล้ว
  2. สร้างไฟล์ข้อความชื่อ local.properties ในไดเรกทอรีรากของแอป
  3. ตั้งค่าตำแหน่งของ Android SDK โดยทำดังนี้
     sdk.dir=path/to/android/sdk
    
  4. หากต้องการตั้งค่า Firebase ให้คัดลอก google-services.json ไปที่ packages/apps/Car/DebuggingRestrictionController/app Gradle แยกวิเคราะห์ไฟล์ และตั้งค่าส่วนที่เหลือโดยอัตโนมัติ
  5. กำหนดตัวแปรสภาพแวดล้อม เช่นเดียวกับงานสร้างแบบรวม คุณต้องระบุข้อมูลต่อไปนี้
    • $TOKEN_USES_SELF_SIGNED_CA: true หรือ false;
    • $ROOT_CA_CERT: เส้นทางไปยังใบรับรอง CA หลักที่เข้ารหัส PEM
    • $TOKEN_ISSUER_API_NAME: ชื่อฟังก์ชัน Firebase Cloud
    • $TOKEN_ISSUER_HOST_NAME: SAN ในใบรับรอง
    • $DRC_TEST_EMAIL และ $DRC_TEST_EMAIL: ข้อมูลเข้าสู่ระบบสำหรับการทดสอบ บัญชี แก้ไขข้อบกพร่องของบิลด์เท่านั้น
  6. หากต้องการสร้างแอปด้วย Gradle ให้เรียกใช้คำสั่งดังนี้
    $ ./gradlew build
    

ผสานรวมผู้ออกโทเค็น

ผู้ออกโทเค็นอ้างอิงคือ Firebase Cloud Function ที่ติดตั้งใช้งานใน Node.js มีเพียงผู้ใช้ที่ตรวจสอบสิทธิ์แล้วเท่านั้นที่สามารถเรียกใช้ฟังก์ชันนี้ ก่อนที่จะทำให้แอปใช้งานได้ คุณต้องตั้งค่า คีย์ส่วนตัวและใบรับรองที่ใช้ในการลงนามโทเค็น JWS

  1. เติมข้อมูลไฟล์ JSON ด้วยเนื้อหาต่อไปนี้
    {
        "key": "---BEGIN PRIVATE KEY---\nRSA_PRIVATE_KEY\n-----END PRIVATE KEY-----\n",
        "certificates.0": "-----BEGIN CERTIFICATE-----\nTOKEN_SIGNING_CERT\n-----END CERTIFICATE-----\n",
        "certificates.1": "-----BEGIN CERTIFICATE-----\nINTERMEDIATE_CA_CERT\n-----END CERTIFICATE-----\n",
        "certificates.2": "-----BEGIN CERTIFICATE-----\nROOT_CA_CERT\n-----END CERTIFICATE-----\n",
        "expiration": "30m",
        "issuer": "Debugging Access Token Issuer",
        "audience": "IHU"
    }
    

    ใบรับรองจะเรียงลำดับโดยมีใบรับรองของเอนทิตีปลายทางก่อนและใบรับรอง CA ระดับรูท ในช่วงท้าย ระยะเวลาหมดอายุสามารถปรับแต่งได้ และสามารถตั้งค่าระยะเวลาให้นานขึ้นได้หาก โทเค็นที่ออกจะใช้เวลาสักครู่ก่อนที่แอป DRC จะได้รับและใช้ได้ โทเค็น ไม่รองรับการเพิกถอน

  2. อัปโหลดการกำหนดค่าไปยัง Firebase
  3. $ firebase functions:config:set api_config="$(cat YOUR_CONFIG.json)"
    
  4. ทำให้ฟังก์ชัน Firebase Cloud ใช้งานได้ด้วยคำสั่งต่อไปนี้
  5. $ firebase deploy --only functions
    
  6. หากต้องการจัดการและตรวจสอบผู้ออกโทเค็น โปรดดู จัดการ ตัวเลือกการติดตั้งใช้งานและรันไทม์

กำหนดข้อจำกัดเริ่มต้น

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

ข้อจำกัดเริ่มต้นสำหรับผู้ใช้ระบบแบบไม่มีส่วนหัวสามารถกำหนดค่าได้ด้วย อาร์เรย์สตริง config_defaultFirstUserRestrictions ใน frameworks/base/core/res/res/values/config.xml การตั้งค่าการจำกัดนี้ จะปิดใช้ Android Debug Bridge (ADB) โดยอัตโนมัติจนกว่าข้อจำกัดจะถูกนำออก ตัวอย่าง:

<string-array translatable="false" name="config_defaultFirstUserRestrictions">
  <item>no_debugging_features</item>
</string-array>

ข้อจำกัดเริ่มต้นสำหรับผู้ใช้ทั่วไป (เช่น คนขับและผู้โดยสาร) และสามารถกำหนดค่าผู้เข้าร่วมได้ใน frameworks/base/core/res/res/xml/config_user_types.xml คุณสามารถซ้อนทับ เพื่อกำหนดข้อจำกัดเริ่มต้นสำหรับผู้ใช้แต่ละประเภทตามลำดับ เช่น

<user-types>
  <full-type name="android.os.usertype.full.SECONDARY" >
    <default-restrictions no_debugging_features="true"/>
  </full-type>
  <full-type name="android.os.usertype.full.GUEST" >
    <default-restrictions no_debugging_features="true"/>
  </full-type>
</user-types>