पुष्टि करना और अनुमति देना

इस सेक्शन में, पुष्टि करने और अनुमति देने के सिद्धांतों के बारे में बताया गया है. जिसे फ़्लीट इंजन के साथ इंटिग्रेट किया जा सकता है.

लास्ट माइल फ़्लीट सलूशन से मिलने वाली सुविधाओं को इसके ज़रिए कॉन्फ़िगर किया जा सकता है Google Cloud Console खोलें. फ़्लीट इंजन के SDK टूल ऐसे JSON वेब टोकन (JWT) का इस्तेमाल करने की ज़रूरत होती है जिन्हें किसी सही सेवा खाता.

खास जानकारी

Fleet Engine के हिसाब से पुष्टि करने और अनुमति देने वाले ग्राहक बैकएंड को इनका इस्तेमाल करना चाहिए मानक अनुप्रयोग डिफ़ॉल्ट क्रेडेंशियल करने के तरीके हैं.

फ़्लीट इंजन को ऐसे कॉल भी मिलते हैं जो भरोसे के लायक नहीं होते जैसे कि स्मार्टफ़ोन और ब्राउज़र. सिर्फ़ सेवा खाते की सीक्रेट कुंजियों को सुरक्षित रखने के लिए भरोसेमंद माहौल के लिए सही हैं, ग्राहकों को बैकएंड से जनरेट होने की उम्मीद की जाती है फ़्लीट इंजन के लिए कुछ अन्य दावों के साथ हस्ताक्षर किए गए JSON वेब टोकन (JWT) जो गैर-भरोसेमंद सिस्टम को जारी किए जा सकते हैं. जैसे, मोबाइल फ़ोन.

पुष्टि करने के डिज़ाइन के सिद्धांत

Fleet Engine के ऑथेंटिकेशन फ़्लो में, डिज़ाइन के ये सिद्धांत शामिल होते हैं.

  • आईएएम की भूमिकाएं उन संसाधनों के लिए अनुमतियों का सेट जिन पर प्रिंसिपल को अनुमति मिली है. उदाहरण के लिए, ऐप्लिकेशन डिफ़ॉल्ट के साथ, एडमिन की भूमिकाओं को सभी काम करने की अनुमति है क्रेडेंशियल, जबकि गैर-भरोसेमंद ड्राइवर* भूमिका को सिर्फ़ अपडेट करने की अनुमति है साथ ही, पुष्टि करने के लिए JWT का इस्तेमाल नहीं किया जा सकेगा और अनुमति.

  • गैर-भरोसेमंद एनवायरमेंट के लिए, JWT का दावा उन इकाइयों पर भी पाबंदी लगाता है जो कॉलर चालू कर सकता है. ये चुनिंदा टास्क या डिलीवरी वाले वाहन हो सकते हैं.

  • जिस एनवायरमेंट में आपका कोड काम करता है उसमें सबसे पहले आपके JWT जारी करने के लिए एक भरोसेमंद एनवायरमेंट में चल रहा है.

  • फ़्लीट इंजन, एपीआई कॉल पर नीचे दी गई सुरक्षा जांच करता है संसाधन:

    1. कॉल करने वाले मुख्य व्यक्ति के पास ज़रूरी अनुमतियां हैं (भूमिका के ज़रिए) असाइनमेंट) पर काम करते हैं.

    2. गैर-एडमिन भूमिकाओं के लिए, अनुरोध में पास किए गए JWT के दावे संसाधन के लिए ज़रूरी अनुमति.

पुष्टि करने की प्रक्रिया

नीचे दिया गया सिलसिलेवार डायग्राम, पुष्टि करने के फ़्लो की जानकारी दिखाता है.

  1. फ़्लीट एडमिन, सेवा खाते बनाता है.

  2. फ़्लीट एडमिन, सेवा खातों को खास आईएएम भूमिकाएं असाइन करता है.

  3. फ़्लीट एडमिन, सेवा खातों की मदद से अपने बैकएंड को कॉन्फ़िगर करता है और ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल.

  4. क्लाइंट ऐप्लिकेशन, ग्राहक बैकएंड से JWT का अनुरोध करता है. अनुरोध करने वाला व्यक्ति यह कर सका वह ड्राइवर ऐप्लिकेशन, उपभोक्ता ऐप्लिकेशन या निगरानी करने वाला ऐप्लिकेशन हो.

  5. ग्राहक बैकएंड पर हस्ताक्षर करके, उससे जुड़ी सेवा के लिए JWT जारी करता है जोड़ें. क्लाइंट ऐप्लिकेशन को JWT मिलता है.

  6. क्लाइंट ऐप्लिकेशन, पढ़ने या बदलाव करने के लिए फ़्लीट इंजन से कनेक्ट करने के लिए JWT का इस्तेमाल करता है यह डेटा, सेटअप चरण के दौरान असाइन की गई IAM भूमिकाओं पर निर्भर करता है.

पुष्टि करने के क्रम का डायग्राम

Cloud प्रोजेक्ट का सेटअप

क्लाउड प्रोजेक्ट सेट अप करने के लिए, पहले अपना प्रोजेक्ट बनाएं और फिर सेवा खाते बनाएं.

Google Cloud प्रोजेक्ट बनाने के लिए:

  1. Google Cloud Console का इस्तेमाल करके, Google Cloud प्रोजेक्ट बनाएं.
  2. API और सेवाएं डैशबोर्ड का उपयोग करके, लोकल राइड और डिलीवरी की सुविधा देने वाला एपीआई.

सेवा खाते और आईएएम भूमिकाएं

सेवा खाता एक विशेष प्रकार का खाता होता है, जिसका उपयोग किसी व्यक्ति के बजाय ऐप्लिकेशन द्वारा किया जाता है. आम तौर पर, सेवा खाते का इस्तेमाल उन JWT को मिंट करने के लिए किया जाता है जो का इस्तेमाल किया जा सकता है. गलत इस्तेमाल की संभावना को कम करने के लिए आपके पास कई सेवा खाते बनाने की सुविधा है. हर खाते में कम से कम भूमिकाएं दी जाएंगी आवश्यक ().

लास्ट माइल फ़्लीट सलूशन इन भूमिकाओं का इस्तेमाल करता है:

भूमिकाब्यौरा
फ़्लीट इंजन डिलीवरी भरोसेमंद ड्राइवर उपयोगकर्ता

roles/fleetengine.deliveryTrustedDriver
डिलीवरी वाहन और टास्क बनाने और अपडेट करने की अनुमति देता है, इसमें डिलीवरी वाहन की जगह और टास्क का स्टेटस अपडेट करना शामिल है या नतीजे. इस भूमिका वाले सेवा खाते के बनाए गए टोकन आम तौर पर, डिलीवरी ड्राइवर के मोबाइल डिवाइस या भी शामिल हो सकते हैं.
फ़्लीट इंजन डिलीवरी गैर-भरोसेमंद ड्राइवर उपयोगकर्ता

roles/fleetengine.deliveryUntrustedDriver
डिलीवरी वाले वाहन की जगह की जानकारी अपडेट करने की अनुमति देता है. मिंट किए गए टोकन इस भूमिका वाले सेवा खाते के लिए, आम तौर पर आपकी डिलीवरी के समय का इस्तेमाल किया जाता है ड्राइवर के मोबाइल डिवाइस.
फ़्लीट इंजन डिलीवरी उपभोक्ता उपयोगकर्ता

roles/fleetengine.deliveryConsumer
ट्रैकिंग आईडी का इस्तेमाल करके टास्क खोजने की अनुमति देता है, और टास्क की जानकारी को पढ़ें, लेकिन उसे अपडेट न करें. मिंट किए गए टोकन जो इस भूमिका वाले सेवा खाते के लिए काम करते हैं, उनका इस्तेमाल आम तौर पर डिलीवरी से किया जाता है उपभोक्ता के वेब ब्राउज़र पर.
फ़्लीट इंजन डिलीवरी एडमिन

roles/fleetengine.deliveryAdmin
डिलीवरी संसाधनों के लिए पढ़ने और लिखने की अनुमति देता है. मुख्य खाते को JWT का इस्तेमाल करने की ज़रूरत नहीं है. इसके बजाय, 'ऐप्लिकेशन' का इस्तेमाल करना चाहिए डिफ़ॉल्ट क्रेडेंशियल. कस्टम JWT दावों को अनदेखा किया जाता है. यह भूमिका भरोसेमंद एनवायरमेंट तक सीमित (ग्राहक बैकएंड).
फ़्लीट इंजन डिलीवरी सुपर यूज़र **(इस्तेमाल नहीं किया जा सका)**

roles/fleetengine.deliverySuperUser
सभी डिलीवरी व्हीकल और टास्क एपीआई को अनुमति देता है. मिंट किए गए टोकन का इस्तेमाल करने वाला होता है. आम तौर पर, इस भूमिका का इस्तेमाल आपके बैकएंड से किया जाता है सर्वर.
फ़्लीट इंजन डिलीवरी फ़्लीट रीडर

roles/fleetengine.deliveryFleetReader
डिलीवरी करने वाले वाहनों और टास्क को पढ़ने और उन्हें खोजने की अनुमति देता है टास्क के लिए, ट्रैकिंग आईडी का इस्तेमाल करें. इसके साथ सेवा खाते के ज़रिए मिनटित टोकन भूमिका का इस्तेमाल आम तौर पर, डिलीवरी फ़्लीट ऑपरेटर के वेब ब्राउज़र से किया जाता है.

ऐसे संगठन जो अपने डिलीवरी ड्राइवरों को डिवाइस मैनेज करते हैं कॉर्पोरेट आईटी, फ़्लीट इंजन की सुविधा का फ़ायदा ले सकता है. भरोसेमंद ड्राइवर उपयोगकर्ता की भूमिका और सभी फ़्लीट इंजन या कुछ या सभी को इंटिग्रेट करने का विकल्प चुनें मोबाइल ऐप्लिकेशन में इंटरैक्शन करते हैं.

अपना डिवाइस लाएं नीतियों का इस्तेमाल करने वाले संगठनों को फ़्लीट इंजन के गैर-भरोसेमंद ड्राइवर की भूमिका की सुरक्षा और सिर्फ़ Fleet Engine को वाहन की जगह की जानकारी भेजने के लिए मोबाइल ऐप्लिकेशन. अन्य सभी इंटरैक्शन, ग्राहक बैकएंड सर्वर से होने चाहिए.

ड्राइवर और उपभोक्ता SDK टूल, इन स्टैंडर्ड भूमिकाओं के आधार पर बनाए जाते हैं. हालांकि, कस्टम भूमिकाएं बनाई जा सकती हैं जो अनुमतियों के आर्बिट्रेरी सेट को एक साथ बंडल करने देती है. ड्राइवर और उपभोक्ता SDK टूल तब गड़बड़ी के मैसेज दिखाएंगे, जब आवश्यक अनुमति नहीं है. इस वजह से, हम खास तौर पर यह सुझाव देते हैं इसके लिए, कस्टम रोल की जगह ऊपर दी गई भूमिकाओं के स्टैंडर्ड सेट का इस्तेमाल करें.

सेवा खाता बनाना

IAM & Admin > Service Accounts का इस्तेमाल करके, सेवा खाता बनाया जा सकता है टैब पर क्लिक करें. भूमिका ड्रॉप-डाउन सूची से, फ़्लीट इंजन जोड़ना और सेवा खाते को कोई एक भूमिका असाइन करना. यह अच्छा है का इस्तेमाल करें. उदाहरण के लिए, सेवा खाते को एक सही नाम दें.

सुविधा के लिए, अगर आपको गैर-भरोसेमंद क्लाइंट के लिए JWTs जोड़ने की ज़रूरत है, अगर उपयोगकर्ता, सेवा खाते के टोकन क्रिएटर की भूमिका में हैं, तो उन्हें टोकन मिंट करने की सुविधा मिलती है gcloud कमांड लाइन टूल के साथ.

gcloud projects add-iam-policy-binding project-id \
       --member=user:my-user@example.com \
       --role=roles/iam.serviceAccountTokenCreator

जहां my-user@example.com का इस्तेमाल ईमेल किया जाता है gcloud (gcloud auth list --format='value(account)') की मदद से पुष्टि करें.

फ़्लीट इंजन ऑथ लाइब्रेरी

फ़्लीट इंजन, गैर-भरोसेमंद में Fleet Engine API के ऐक्सेस को रोकने के लिए, JWT का इस्तेमाल करता है का इस्तेमाल करें. The Fleet Engine Auth Library, यहां उपलब्ध है GitHub, इस्तेमाल करना आसान बनाता है फ़्लीट इंजन JWT बनाना और उन्हें सुरक्षित तरीके से साइन करना.

इस लाइब्रेरी से ये फ़ायदे मिलते हैं:

  • यह फ़्लीट इंजन टोकन बनाने की प्रोसेस को आसान बनाता है.
  • क्रेडेंशियल फ़ाइलों का इस्तेमाल करने के अलावा, अन्य टोकन पर हस्ताक्षर करने के तरीके उपलब्ध कराता है. जैसे किसी सेवा खाते की पहचान का इस्तेमाल किया है.)

अनुमति पाने के लिए JSON वेब टोकन (JWT) बनाना

जब फ़्लीट इंजन ऑथ लाइब्रेरी का इस्तेमाल नहीं किया जा रहा हो, तो JWTs ऐसा होना चाहिए इसे सीधे आपके कोड बेस में बनाया जाता है. इसके लिए ज़रूरी है कि आपके पास JWT को समझना और यह समझना कि वे फ़्लीट इंजन से कैसे जुड़े हैं. इसलिए, हमने फ़्लीट इंजन ऑथ लाइब्रेरी का इस्तेमाल करने का सुझाव दिया जाता है.

फ़्लीट इंजन में, JWT कम समय तक चलने वाले पुष्टि की सुविधा देते हैं और यह पक्का किया जा सकेगा कि डिवाइसों में, वाहनों या टास्क में सिर्फ़ जिसके लिए उन्हें अनुमति मिली हुई है. JWT में एक हेडर और एक दावा सेक्शन होता है. हेडर सेक्शन में इस्तेमाल करने के लिए निजी कुंजी (सेवा खातों से ली गई) और एन्क्रिप्शन एल्गोरिदम. दावे वाले सेक्शन में, यह जानकारी शामिल होती है: टोकन बनाने का समय, टोकन के लाइव होने का समय, टोकन के तौर पर काम करने वाली सेवाएं को ऐक्सेस करने और अनुमति देने से जुड़ी अन्य जानकारी का दावा करना ऐक्सेस; उदाहरण के लिए, डिलीवरी वाहन का आईडी.

JWT के हेडर सेक्शन में ये फ़ील्ड होते हैं:

फ़ील्डब्यौरा
alg एल्गोरिदम का इस्तेमाल करना है. `RS256`.
typ टोकन का टाइप. `JWT`.
kid आपके सेवा खाते का निजी पासकोड आईडी. आपको यह वैल्यू दिखेगी आपके सेवा खाते की JSON फ़ाइल के `private_key_id` फ़ील्ड में मौजूद वैल्यू डालें. पक्का करें कि सेवा खाते की ऐसी कुंजी का इस्तेमाल किया जा रहा हो जिसके पास अनुमतियों के सही लेवल हों.

JWT के दावे सेक्शन में ये फ़ील्ड होते हैं:

फ़ील्डब्यौरा
iss आपके सेवा खाते का ईमेल पता.
sub आपके सेवा खाते का ईमेल पता.
aud आपके सेवा खाते का Service_NAME, इस मामले में https://fleetengine.googleapis.com/
iat टोकन बनाने के समय का टाइमस्टैंप, जिसे कुछ सेकंड बीत चुका है 1 जनवरी, 1970 को रात 12:00:00 यूटीसी से. तिरछा होने पर 10 मिनट दें. अगर अगर टाइमस्टैंप बहुत पहले या आने वाले समय का है, तो सर्वर गड़बड़ी की शिकायत कर सकता है.
exp टोकन की समयसीमा खत्म होने का टाइमस्टैंप, जिसे कुछ सेकंड बीत चुका है 1 जनवरी, 1970 को रात 12:00:00 यूटीसी से. अनुरोध तब पूरा नहीं होता, जब टाइमस्टैंप अगले एक घंटे में.
authorization इस्तेमाल के उदाहरण के हिसाब से, इसमें ये चीज़ें शामिल हो सकती हैं `deliveryvehicleid`, `trackingid`, `taskid` या `taskids`.

JWT टोकन मिंट करने का मतलब है, इसे साइन करना. निर्देशों और कोड सैंपल के लिए JWT बनाने और हस्ताक्षर करने के लिए, देखें OAuth के बिना सेवा खाते की अनुमति. इसके बाद, gRPC कॉल या इस्तेमाल किए गए अन्य तरीकों में मिंट किया गया टोकन अटैच किया जा सकता है फ़्लीट इंजन को ऐक्सेस करने के लिए.

JWT के दावे

लास्ट माइल फ़्लीट सलूशन निजी दावों का इस्तेमाल करता है. निजी दावों का इस्तेमाल करने से यह पक्का होता है कि सिर्फ़ अधिकृत क्लाइंट अपने डेटा तक पहुंच सकते हैं. उदाहरण के लिए, जब आपका बैकएंड डिलीवरी ड्राइवर के मोबाइल डिवाइस के लिए JSON वेब टोकन जारी करता है, जबकि उस टोकन को उस ड्राइवर की डिलीवरी की वैल्यू के साथ deliveryvehicleid दावा शामिल होना चाहिए वाहन आईडी. इसके बाद, ड्राइवर की भूमिका के आधार पर, टोकन सिर्फ़ डिलीवर किए गए किसी वाहन का आईडी सबमिट करें, न कि किसी अन्य वाहन का आईडी.

लास्ट माइल फ़्लीट सलूशन इन निजी दावों का इस्तेमाल करता है:

  • deliveryvehicleid - हर वाहन की डिलीवरी वाले एपीआई को कॉल करते समय इस्तेमाल करें.
  • taskid - हर टास्क के लिए एपीआई कॉल करते समय इस्तेमाल करें.
  • taskids - BatchCreateTasksAPI को कॉल करते समय इस्तेमाल करें. यह दावा और अरे में वे सभी टास्क आईडी शामिल होने चाहिए जो अनुरोध को पूरा करें. delivervehicleid, trackingid या taskid दावे.
  • trackingid - GetTaskTrackingInfoAPI पर कॉल करते समय इस्तेमाल करें. दावे को अनुरोध में मौजूद ट्रैकिंग आईडी से मेल खाएं. delivervehicleid को शामिल न करें, taskid या taskids दावे.

एपीआई को कॉल करते समय, टोकन में सही दावा भी शामिल होना चाहिए से अपने बैकएंड सर्वर पर सेट कर सकते हैं, लेकिन आप चाहें तो तारे के निशान के विशेष मान का उपयोग भी कर सकते हैं. ("*") deliveryvehicleid, taskid, और trackingid दावों के लिए. तारे का निशान taskids दावे में भी ("*") का इस्तेमाल किया जा सकता है, लेकिन सिर्फ़ यही एलिमेंट होना चाहिए करते हैं.

अगर आपको JSON को बनाने के बजाय, सीधे टोकन बेयरर के तौर पर साइन करना है, तो तो OAuth 2.0 ऐक्सेस टोकन का इस्तेमाल करके, OAuth के बिना सेवा खाते की अनुमति देना पर जाएं.

टोकन को किसी gRPC कॉल में अटैच करने का तरीका भाषा पर निर्भर करता है और कॉल करने के लिए इस्तेमाल किया जाने वाला फ़्रेमवर्क. टोकन तय करने का तरीका एचटीटीपी कॉल में शामिल करने का मतलब है, बियरर टोकन के साथ ऑथराइज़ेशन हेडर शामिल करना जिसका मान टोकन है, जैसा कि किसी व्यक्ति के लिए प्राधिकरण नोट में बताया गया है शिपमेंट ट्रैकिंग या कुछ समय के लिए परफ़ॉर्मेंस इस्तेमाल के उदाहरण.

नीचे दिए गए उदाहरण में, आपके बैकएंड सर्वर:

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_provider_service_account"
    }
    .
    {
      "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
      "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "taskid": "*"
       }
    }

नीचे दिए गए उदाहरण में, बैच बनाने की कार्रवाई के लिए टोकन दिखाया गया है बैकएंड सर्वर:

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_provider_service_account"
    }
    .
    {
      "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
      "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "taskids": ["*"]
       }
    }

नीचे दिए गए उदाहरण में, डिलीवरी में लगने वाले समय के लिए टोकन दिखाया गया है. आपका बैकएंड सर्वर:

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_provider_service_account"
    }
    .
    {
      "iss": "provider@yourgcpproject.iam.gserviceaccount.com",
      "sub": "provider@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "deliveryvehicleid": "*"
       }
    }

नीचे दिए गए उदाहरण में, असली उपयोगकर्ता के ग्राहकों के लिए टोकन दिखाया गया है:

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_delivery_consumer_service_account"
    }
    .
    {
      "iss": "consumer@yourgcpproject.iam.gserviceaccount.com",
      "sub": "consumer@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "trackingid": "shipment_12345"
       }
    }

नीचे दिए गए उदाहरण में, आपके ड्राइवर ऐप्लिकेशन के लिए टोकन दिखाया गया है:

    {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_delivery_driver_service_account"
    }
    .
    {
      "iss": "driver@yourgcpproject.iam.gserviceaccount.com",
      "sub": "driver@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "authorization": {
         "deliveryvehicleid": "driver_12345"
       }
    }
  • हेडर में मौजूद kid फ़ील्ड के लिए, अपने सेवा खाते की 'निजी' के बारे में बताएं पासकोड आईडी. आपको यह वैल्यू इसके private_key_id फ़ील्ड में मिलेगी: सेवा खाते की JSON फ़ाइल.
  • iss और sub फ़ील्ड के लिए, अपने सेवा खाते का ईमेल पता बताएं. आपको यह वैल्यू, अपने सेवा खाते के client_email फ़ील्ड में दिखेगी JSON फ़ाइल.
  • aud फ़ील्ड के लिए, https://SERVICE_NAME/ बताएं.
  • iat फ़ील्ड के लिए, टोकन बनाए जाने के समय का टाइमस्टैंप बताएं, 1 जनवरी, 1970 को 00:00:00 यूटीसी से सेकंड में. 10 मिनट का समय दें पर निर्भर नहीं रहना चाहिए. अगर टाइमस्टैंप बहुत पहले या आने वाले समय का है, तो सर्वर किसी गड़बड़ी की शिकायत कर सकता है.
  • exp फ़ील्ड के लिए, टोकन की समयसीमा खत्म होने का टाइमस्टैंप बताएं, 1 जनवरी, 1970 को 00:00:00 यूटीसी से सेकंड में. सुझाई गई वैल्यू है, iat + 3,600.

किसी मोबाइल डिवाइस या असली उपयोगकर्ता को टोकन भेजने के लिए, साइन करते समय यह पक्का करें कि डिलीवरी ड्राइवर या उपभोक्ता की भूमिका के लिए क्रेडेंशियल फ़ाइल का इस्तेमाल करना होगा. या फिर, मोबाइल डिवाइस या असली उपयोगकर्ता के पास बदलाव करने या देखने की सुविधा होगी ऐसी जानकारी जिसका ऐक्सेस उनके पास नहीं होना चाहिए.