ทําตามวิธีการในหน้านี้เพื่อผสานรวมตัวควบคุมข้อจํากัดการแก้ไขข้อบกพร่อง 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
- หากต้องการสร้างโปรเจ็กต์ Firebase ให้ดู เพิ่ม Firebase ไปยัง โปรเจ็กต์ Android ของคุณ
- หากต้องการเปิดใช้ตัวตรวจสอบสิทธิ์ Firebase บางรายการ โปรดดู ฉันต้อง เริ่มต้นด้วยการตรวจสอบสิทธิ์ Firebase ไหม
- หากต้องการเพิ่มฟังก์ชัน Firebase Cloud ที่ว่างเปล่า โปรดดู รับ เริ่มต้นแล้ว
- หากยังไม่ได้ดำเนินการ ให้ติดตั้งเครื่องมือ
Node.js
, NPM และ Firebase เพื่อรวบรวมและ ติดตั้งใช้งานผู้ออกโทเค็น
ผสานรวมแอป DRC
แอป DRC อ้างอิงอยู่ใน
packages/apps/Car/DebuggingRestrictionController
สามารถสร้างแอป
bundle [แพ็กเกจ] ใน AOSP กับ Soong หรือ
เลิกรวมกลุ่มกับ Gradle
บิลด์แบบรวม
วิธีสร้างแอปที่รวมแพ็กเกจมีดังนี้
- คัดลอก
applicationId
,projectId
และapiKey
จากgoogle-services.json
เป็นภาษาpackages/apps/Car/DebuggingRestrictionController/soong/FirebaseApplication.java
การทำเช่นนี้จะช่วยให้แอป DRC เชื่อมต่อกับ Firebase ได้อย่างถูกต้อง - อัปเดตค่าคงที่เหล่านี้ใน
packages/apps/Car/DebuggingRestrictionController/soong/BuildConfig.java
:TOKEN_USES_SELF_SIGNED_CA
จะระบุว่าใบรับรอง CA รูทที่ลงชื่อด้วยตนเองคือ หากเปิดใช้ แอป DRC จะเชื่อถือเฉพาะใบรับรองรูทที่เข้ารหัสด้วย PEM ที่ระบุไว้ในROOT_CA_CERT
TOKEN_ISSUER_API_NAME
คือชื่อของฟังก์ชัน Firebase Cloud และควร ตรงกับฟังก์ชันระบบคลาวด์ที่คุณสร้างไว้ก่อนหน้านี้ในคอนโซล FirebaseTOKEN_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 เพื่อคอมไพล์แอป
วิธีสร้างบิลด์ที่ไม่ได้รวมกลุ่ม
- ตรวจสอบว่าคุณได้ติดตั้ง Android SDK แล้ว
- สร้างไฟล์ข้อความชื่อ
local.properties
ในไดเรกทอรีรากของแอป - ตั้งค่าตำแหน่งของ Android SDK โดยทำดังนี้
sdk.dir=path/to/android/sdk
- หากต้องการตั้งค่า Firebase ให้คัดลอก
google-services.json
ไปที่packages/apps/Car/DebuggingRestrictionController/app
Gradle แยกวิเคราะห์ไฟล์ และตั้งค่าส่วนที่เหลือโดยอัตโนมัติ - กำหนดตัวแปรสภาพแวดล้อม เช่นเดียวกับงานสร้างแบบรวม คุณต้องระบุข้อมูลต่อไปนี้
$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_EMAI
L: ข้อมูลเข้าสู่ระบบสำหรับการทดสอบ บัญชี แก้ไขข้อบกพร่องของบิลด์เท่านั้น
- หากต้องการสร้างแอปด้วย Gradle ให้เรียกใช้คำสั่งดังนี้
$ ./gradlew build
ผสานรวมผู้ออกโทเค็น
ผู้ออกโทเค็นอ้างอิงคือ Firebase Cloud Function ที่ติดตั้งใช้งานใน Node.js
มีเพียงผู้ใช้ที่ตรวจสอบสิทธิ์แล้วเท่านั้นที่สามารถเรียกใช้ฟังก์ชันนี้ ก่อนที่จะทำให้แอปใช้งานได้ คุณต้องตั้งค่า
คีย์ส่วนตัวและใบรับรองที่ใช้ในการลงนามโทเค็น JWS
- เติมข้อมูลไฟล์ 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 จะได้รับและใช้ได้ โทเค็น ไม่รองรับการเพิกถอน
- อัปโหลดการกำหนดค่าไปยัง Firebase
- ทำให้ฟังก์ชัน Firebase Cloud ใช้งานได้ด้วยคำสั่งต่อไปนี้
- หากต้องการจัดการและตรวจสอบผู้ออกโทเค็น โปรดดู จัดการ ตัวเลือกการติดตั้งใช้งานและรันไทม์
$ firebase functions:config:set api_config="$(cat YOUR_CONFIG.json)"
$ firebase deploy --only functions
กำหนดข้อจำกัดเริ่มต้น
ข้อจำกัดเริ่มต้นจะมีผลก่อนการเปิดเครื่องครั้งแรก ดำเนินการนี้กับทรัพยากรแบบคงที่ การวางซ้อนสำหรับลบล้างค่าเริ่มต้นในเฟรมเวิร์กของ 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>