این سند نحوه صدور JSON Web Tokens را به عنوان بخشی از امکان دسترسی برنامههای مبتنی بر وب و موبایل به دادههای Fleet Engine را پوشش میدهد. اگر قبلاً این کار را نکردهاید، JSON Web Tokens را در بخش Security in Fleet Engine بخوانید. با سرویس Fleet Engine، می توانید JWT ها را به یکی از روش های زیر صادر کنید:
- از کتابخانه مجوز استفاده کنید — گوگل توصیه می کند زمانی که پایگاه کد شما در جاوا نوشته شده است از این روش استفاده کنید. این کتابخانه صدور JWT ها را برای همه سناریوهای موردی که ممکن است با این سرویس نیاز داشته باشید مدیریت می کند و اجرای شما را بسیار ساده می کند.
- JWT های خود را ایجاد کنید — اگر نمی توانید از کتابخانه JWT ما استفاده کنید، باید آنها را در پایگاه کد خود بسازید. این بخش نمونه های مختلف JWT ها را برای هر سناریو ارائه می دهد.
JWT ها چگونه کار می کنند
برای محیطهای غیرقابل اعتماد، مانند تلفنهای همراه و مرورگرهای وب، سرور پشتیبان شما JWTهایی را صادر میکند که به شرح زیر عمل میکنند:
کد مشتری شما که در یک محیط کم اعتماد اجرا می شود، کد سرور شما را که در یک محیط کاملاً قابل اعتماد اجرا می شود فراخوانی می کند تا JWT مناسب را برای ارسال به Fleet Engine درخواست کند.
JWT ها با حساب های خدمات مرتبط هستند، بنابراین درخواست های ارسال شده به Fleet Engine به طور ضمنی با حساب سرویسی که JWT را امضا کرده است مرتبط می شود.
ادعاهای JWT بیشتر منابعی را که مشتری ممکن است روی آنها کار کند، مانند وسایل نقلیه خاص، سفرها یا وظایف محدود می کند.
از کتابخانه مجوز برای جاوا استفاده کنید
برای استفاده از کتابخانه مجوز Fleet Engine برای جاوا، از مخزن GitHub دیدن کنید. این کتابخانه ساخت JWTهای Fleet Engine را ساده کرده و آنها را به طور ایمن امضا می کند. موارد زیر را ارائه می دهد:
- اعلامیه های وابستگی پروژه
- فهرست کاملی از تمام نقشهای حساب خدمات برای سفرهای درخواستی یا کارهای برنامهریزی شده
- مکانیسم های امضای توکن به غیر از استفاده از پرونده های اعتبار ، مانند جعل هویت یک حساب سرویس
- توکنهای امضا شده را به درخواستهای خروجی که از یک خرد gRPC یا یک کتابخانه سرویس گیرنده Google API Codegen (GAPIC) ارائه شده است، پیوست میکند.
- دستورالعملهای ادغام امضاکنندگان با کتابخانههای مشتری Fleet Engine
اگر JWT ها را از کد خود صادر می کنید
اگر نمی توانید از کتابخانه مجوز برای جاوا استفاده کنید، باید JWT ها را در پایگاه کد خود پیاده سازی کنید. این بخش چند دستورالعمل برای ایجاد توکن های خود ارائه می دهد. برای فهرستی از فیلدها و ادعاهای JWT، به JSON Web Tokens در بخش Security in Fleet Engine مراجعه کنید. برای نقشهای حساب سرویس که توسط Fleet Engine استفاده میشود، به نقشهای حساب سرویس مراجعه کنید. برای لیستی از نمونه های JWT برای سفرهای درخواستی یا کارهای برنامه ریزی شده به بخش زیر مراجعه کنید.
دستورالعمل های عمومی
- از حساب ها و نقش های خدماتی مناسب استفاده کنید . حساب سرویس و نقش مرتبط تضمین می کند که کاربر درخواست کننده رمز مجاز به مشاهده اطلاعاتی است که توکن به آنها دسترسی می دهد. به طور مشخص:
- اگر JWT را امضا می کنید تا به دستگاه تلفن همراه منتقل شود ، از حساب سرویس برای نقش Driver یا Consumer SDK استفاده کنید. در غیر این صورت، دستگاه تلفن همراه می تواند داده هایی را که نباید به آنها دسترسی داشته باشد تغییر دهد و به آنها دسترسی پیدا کند.
- اگر JWT را امضا میکنید تا برای تماسهای ممتاز استفاده شود ، هنگام استفاده از ADC یا JWT از حساب سرویس با نقش مدیریت صحیح Fleet Engine استفاده کنید. در غیر این صورت، عملیات با شکست مواجه می شود.
- فقط توکن های ایجاد شده را به اشتراک بگذارید . هرگز اعتبار مورد استفاده برای ایجاد توکن ها را به اشتراک نگذارید.
- برای تماسهای gRPC ، مکانیسم پیوست کردن توکن به زبان و چارچوب مورد استفاده برای برقراری تماس بستگی دارد. مکانیسم مشخص کردن یک نشانه در تماس HTTP شامل یک عنوان
Authorization
با یک نشانه حامل است که مقدار آن نشانه است. - زمان انقضا را برگردانید. سرور شما باید یک زمان انقضا را برای توکن برگرداند، معمولاً در چند ثانیه.
- اگر به جای استفاده از نشانههای دسترسی OAuth 2.0 به ایجاد و امضای مستقیم JSON به عنوان حامل نشانه نیاز دارید ، دستورالعملهای مجوز حساب سرویس بدون OAuth را در مستندات Identity Developer بخوانید.
برای سفرهای درخواستی
- هنگام ایجاد محموله JWT، یک ادعای اضافی در بخش مجوز با کلید
vehicleid
یاtripid
تنظیم شده به ارزش شناسه وسیله نقلیه یا شناسه سفری که تماس برای آن برقرار شده است، اضافه کنید.
برای کارهای برنامه ریزی شده
- هنگامی که سرور شما با API های دیگر تماس می گیرد ، نشانه ها نیز باید شامل ادعای مناسب باشند. برای این کار می توانید کارهای زیر را انجام دهید:
- مقدار هر کلید را روی
*
تنظیم کنید. - به کاربر اجازه دسترسی به تمام
taskids
وdeliveryvehicleids
بدهید. برای انجام این کار، یک ادعای اضافی در بخش مجوز با کلیدهایtaskid
وdeliveryvehicleid
اضافه میکنید. - هنگام استفاده از ستاره (
*
) در ادعایtaskids
، باید تنها عنصر موجود در آرایه باشد.
- مقدار هر کلید را روی
نمونه های JWT برای سفرهای درخواستی
اگر از سفرهای درخواستی استفاده می کنید، این بخش نمونه های JWT را برای سناریوهای رایج ارائه می دهد.
نشانه مثال برای عملیات برنامه درایور
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_driver_service_account"
}
.
{
"iss": "[email protected]",
"sub": "[email protected]",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"vehicleid": "driver_12345"
}
}
نشانه مثال برای عملیات برنامه مصرف کننده
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_consumer_service_account"
}
.
{
"iss": "[email protected]",
"sub": "[email protected]",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"tripid": "trip_54321"
}
}
مثال های JWT برای کارهای زمان بندی شده
اگر از وظایف زمانبندی شده استفاده میکنید، این بخش مثال JWT را برای سناریوهای معمولی ارائه میکند.
توکن نمونه برای یک برنامه درایور
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_delivery_driver_service_account"
}
.
{
"iss": "[email protected]",
"sub": "[email protected]",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"deliveryvehicleid": "driver_12345"
}
}
توکن نمونه برای یک برنامه مصرف کننده
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_delivery_consumer_service_account"
}
.
{
"iss": "[email protected]",
"sub": "[email protected]",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"trackingid": "shipment_12345"
}
}
نمونه های JWT برای عملیات ناوگان
این بخش یک مثال JWT برای یک سناریوی معمولی در عملیات ناوگان ارائه می دهد.
نمونه ای برای ردیابی همه کارها و وسایل نقلیه در ناوگان
مثال زیر توکنی است که تمام وظایف و وسایل نقلیه موجود در ناوگان را از یک برنامه مبتنی بر وب که توسط یک اپراتور استفاده می شود ردیابی می کند. مجوزهای مورد نیاز برای این عملیات بیشتر از برنامه های مشتری است. برای اجرای طرف مشتری که از این نشانه استفاده می کند ، به تنظیم کتابخانه ردیابی ناوگان JavaScript مراجعه کنید:
توکن را با استفاده از نقش
Fleet Engine Delivery Fleet Reader
Cloud IAM امضا کنید.
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_consumer_service_account"
}
.
{
"iss": "[email protected]",
"sub": "[email protected]",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"scope": "https://www.googleapis.com/auth/xapi",
"authorization": {
"taskid": "*",
"deliveryvehicleid": "*",
}
}
روش احراز هویت جایگزین برای عملیات سرور باطن
Google به شما توصیه می کند از ADC برای تأیید اعتبار عملیات سرور پس زمینه استفاده کنید. اگر نمی توانید از ADC استفاده کنید و نیاز به استفاده از JWT دارید، به این مثال ها مراجعه کنید.
توکن نمونه برای عملیات سرور پشتیبان درخواستی
{ "alg": "RS256", "typ": "JWT", "kid": "private_key_id_of_provider_service_account" } { "iss": "[email protected]", "sub": "[email protected]", "aud": "https://fleetengine.googleapis.com/", "iat": 1511900000, "exp": 1511903600, "authorization": { "vehicleid": "*", "tripid": "*" } }
مثال برای یک عملیات سرور با پس زمینه برنامه ریزی شده
{ "alg": "RS256", "typ": "JWT", "kid": "private_key_id_of_provider_service_account" } . { "iss": "[email protected]", "sub": "[email protected]", "aud": "https://fleetengine.googleapis.com/", "iat": 1511900000, "exp": 1511903600, "authorization": { "taskid": "*" } }
مثال برای یک دسته سرور با پس زمینه برنامه ریزی شده ، عملکرد وظایف را ایجاد کنید
{ "alg": "RS256", "typ": "JWT", "kid": "private_key_id_of_provider_service_account" } . { "iss": "[email protected]", "sub": "[email protected]", "aud": "https://fleetengine.googleapis.com/", "iat": 1511900000, "exp": 1511903600, "authorization": { "taskids": ["*"] } }
نمونه نمونه برای یک سرور پس زمینه برنامه ریزی شده در هر وسیله نقلیه تحویل
{ "alg": "RS256", "typ": "JWT", "kid": "private_key_id_of_provider_service_account" } . { "iss": "[email protected]", "sub": "[email protected]", "aud": "https://fleetengine.googleapis.com/", "iat": 1511900000, "exp": 1511903600, "authorization": { "deliveryvehicleid": "*" } }
بعدش چی
- تنظیمات خود را به گونه ای تأیید کنید که بتوانید یک وسیله نقلیه آزمایشی ایجاد کنید و اطمینان حاصل کنید که نشانه های شما مطابق آنچه در نظر گرفته شده است کار می کنند
- برای کسب اطلاعات در مورد استفاده از ADC به جای JWTS برای عملیات سرور پس زمینه ، به نمای کلی امنیت مراجعه کنید.