डिबगिंग प्रतिबंध नियंत्रक एकीकरण गाइड

AAOS डिबगिंग प्रतिबंध नियंत्रक (DRC) को एकीकृत करने के लिए निम्नलिखित निर्देशों का उपयोग करें।

चित्र 1. डीआरसी ऐप उदाहरण

आर्किटेक्चर

डीआरसी वास्तुकला नीचे सचित्र है। लाल रंग में उल्लिखित घटक (टोकन जारीकर्ता और डेब्यूटिंग प्रतिबंध नियंत्रक) के साथ संदर्भ कार्यान्वयन हैं जिन्हें आप अनुकूलित कर सकते हैं।

चित्र 2. डीआरसी वास्तुकला

डीआरसी क्या है?

कार हेड यूनिट में डीआरसी ऐप शामिल है ( packages/apps/Car/DebuggingRestrictionController में संदर्भ कार्यान्वयन देखें)। संदर्भ ऐप में टोकन जारीकर्ता से एक्सेस टोकन प्राप्त करने, टोकन को मान्य करने और फिर टोकन में निर्दिष्ट डिबगिंग प्रतिबंध परिवर्तनों को लागू करने का तर्क शामिल है। तर्क में कार-साइड पर मूल यूएक्स तत्व शामिल हैं।

टोकन जारीकर्ता क्या है?

यह एक वेब सेवा है जो क्रिप्टोग्राफिक रूप से हस्ताक्षरित एक्सेस टोकन जारी करती है ( packages/apps/Car/DebuggingRestrictionController/server में संदर्भ कार्यान्वयन देखें)। संदर्भ वेब सेवा एक परिनियोजित करने योग्य फायरबेस क्लाउड फ़ंक्शन है (अधिक जानने के लिए, फायरबेस के लिए क्लाउड फ़ंक्शंस देखें)।

आवश्यक शर्तें

किसी संदर्भ कार्यान्वयन को परिनियोजित करने से पहले, निम्न कार्यों को पूरा करना सुनिश्चित करें।

एक्सेस टोकन पर हस्ताक्षर करने के लिए प्रमाण पत्र तैयार करना

टोकन जारीकर्ता JSON वेब सिग्नेचर (JWS) को एक्सेस टोकन के रूप में जेनरेट करता है। इष्टतम संगतता के लिए, संदर्भ जारीकर्ता केवल RS256 एल्गोरिथ्म (SHA256 के साथ RSA हस्ताक्षर) का समर्थन करता है। कुंजी रोटेशन की सुविधा के लिए, एक्सेस टोकन पर हस्ताक्षर करने के लिए एकल प्रमाणपत्र के बजाय प्रमाणपत्र श्रृंखला का उपयोग करें। एक विशिष्ट प्रमाणपत्र श्रृंखला में एक रूट CA प्रमाणपत्र, एक मध्यवर्ती CA प्रमाणपत्र और एक अंतिम-इकाई प्रमाणपत्र होना चाहिए।

JWS टोकन पर हस्ताक्षर करने वाला अंतिम-इकाई प्रमाणपत्र एक मानक TLS प्रमाणपत्र से अलग नहीं है। आप या तो DigiCert जैसे सार्वजनिक CA से प्रमाणपत्र खरीद सकते हैं या स्व-हस्ताक्षरित रूट CA प्रमाणपत्र या हार्डवेयर सुरक्षा मॉड्यूल का उपयोग करके अपनी स्वयं की प्रमाणपत्र श्रृंखला बनाए रख सकते हैं। एंड-एंटिटी प्रमाणपत्र विषय वैकल्पिक नाम (SAN) एक्सटेंशन के साथ X509v3 प्रमाणपत्र होना चाहिए। SAN एक्सटेंशन में टोकन जारीकर्ता का एक पहचानकर्ता (उदाहरण के लिए, होस्टनाम) होता है। अंत में, EC प्रमाणपत्रों पर RSA प्रमाणपत्रों को प्राथमिकता दी जानी चाहिए क्योंकि टोकन जारीकर्ता केवल RS256 का समर्थन करता है।

packages/apps/Car/DebuggingRestrictionController/server/genkey.sh में स्व-हस्ताक्षरित प्रमाणपत्र बनाने के लिए Google एक शेल स्क्रिप्ट प्रदान करता है।

फायरबेस सेट करना

संदर्भ टोकन जारीकर्ता फायरबेस प्रमाणीकरण और फायरबेस क्लाउड फ़ंक्शन का उपयोग करता है।

अपना फायरबेस खाता सेट करने के लिए:

  1. Firebase प्रोजेक्ट बनाने के लिए, अपने Android प्रोजेक्ट में Firebase जोड़ें देखें.
  2. कुछ फायरबेस प्रमाणीकरणकर्ताओं को सक्षम करने के लिए, देखें कि मैं फायरबेस प्रमाणीकरण कहां से शुरू करूं? .
  3. एक खाली फायरबेस क्लाउड फ़ंक्शन जोड़ने के लिए, प्रारंभ करें देखें।
  4. यदि पहले से नहीं किया है, तो टोकन जारीकर्ता को संकलित और परिनियोजित करने के लिए Node.js, NPM और Firebase टूल इंस्टॉल करें।

डीआरसी ऐप को एकीकृत करना

संदर्भ DRC ऐप packages/apps/Car/DebuggingRestrictionController में स्थित है। ऐप को सूंग के साथ एओएसपी में बंडल किया जा सकता है या ग्रैडल के साथ अनबंडल किया जा सकता है।

बंडल बिल्ड

एक बंडल ऐप बनाने के लिए:

  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 ऐप केवल ROOT_CA_CERT में निर्दिष्ट ROOT_CA_CERT एन्कोडेड रूट CA प्रमाणपत्र पर भरोसा करता है।
    • TOKEN_ISSUER_API_NAME , Firebase क्लाउड फ़ंक्शन का नाम है और इसे आपके द्वारा पहले Firebase कंसोल में बनाए गए क्लाउड फ़ंक्शन से मेल खाना चाहिए।
    • TOKEN_ISSUER_HOSTNAME को अंतिम निकाय प्रमाणपत्र में विषय वैकल्पिक नाम से मेल खाना चाहिए जो पहुंच टोकन पर हस्ताक्षर करेगा।
    • DRC_TEST_EMAIL और DRC_TEST_PASSWORD एक वैकल्पिक परीक्षण खाते के लिए क्रेडेंशियल हैं, जिन्हें 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>

अनबंडल बिल्ड

अनबंडल डीआरसी ऐप को संकलित करने के लिए ग्रैडल का उपयोग करता है।

एक अनबंडल बिल्ड बनाने के लिए:

  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 पर कॉपी करें। ग्रैडल फ़ाइल को पार्स करता है और बाकी को स्वचालित रूप से सेट करता है।
  5. पर्यावरण चर को परिभाषित करें। बंडल बिल्ड की तरह, आपको यह निर्दिष्ट करना होगा:
    • $TOKEN_USES_SELF_SIGNED_CA : सही या गलत;
    • $ROOT_CA_CERT : PEM-एन्कोडेड रूट CA प्रमाणपत्र का पथ;
    • $TOKEN_ISSUER_API_NAME : फायरबेस क्लाउड फ़ंक्शन का नाम;
    • $TOKEN_ISSUER_HOST_NAME : प्रमाणपत्र में SAN;
    • $DRC_TEST_EMAIL और $DRC_TEST_EMAI L: परीक्षण खाते के लिए क्रेडेंशियल, डीबग केवल बनाता है।
  6. ग्रैडल के साथ ऐप बनाने के लिए, इस तरह एक कमांड चलाएँ:
    $ ./gradlew build
    

टोकन जारीकर्ता को एकीकृत करना

संदर्भ टोकन जारीकर्ता 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 प्रमाणपत्र के साथ ऑर्डर किया जाता है। समाप्ति अवधि अनुकूलन योग्य है और इसे लंबी अवधि के लिए सेट किया जा सकता है यदि किसी जारी किए गए टोकन को प्राप्त करने और डीआरसी ऐप द्वारा उपभोग करने से पहले कुछ समय लगता है। टोकन निरस्तीकरण समर्थित नहीं है।

  2. Firebase पर कॉन्फ़िगरेशन अपलोड करें:
  3. $ firebase functions:config:set api_config="$(cat YOUR_CONFIG.json)"
    
  4. फायरबेस क्लाउड फ़ंक्शन परिनियोजित करें:
  5. $ firebase deploy --only functions
    
  6. अपने टोकन जारीकर्ता को प्रबंधित और मॉनिटर करने के लिए, फ़ंक्शन परिनियोजन और रनटाइम विकल्प प्रबंधित करें देखें।

डिफ़ॉल्ट प्रतिबंध सेट करना

पहले बूट से पहले डिफ़ॉल्ट प्रतिबंध लागू किए जा सकते हैं। एंड्रॉइड फ्रेमवर्क में डिफ़ॉल्ट को ओवरराइड करने के लिए इसे स्थिर संसाधन ओवरले के साथ करें। विभिन्न प्रकार के उपयोगकर्ताओं पर क्रमशः प्रतिबंध लागू किए जा सकते हैं। विभिन्न प्रकार के उपयोगकर्ताओं के बारे में जानने के लिए, बहु-उपयोगकर्ता सहायता देखें।

हेडलेस सिस्टम उपयोगकर्ता के लिए डिफ़ॉल्ट प्रतिबंध को config_defaultFirstUserRestrictions string-array के साथ frameworks/base/core/res/res/values/config.xml में कॉन्फ़िगर किया जा सकता है। इस प्रतिबंध को सेट करना स्वचालित रूप से एंड्रॉइड डीबग ब्रिज (एडीबी) को तब तक अक्षम कर देता है जब तक कि प्रतिबंध हटा नहीं दिया जाता है, उदाहरण के लिए:

<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>