JSON Web Jetonları Sorun

Bu dokümanda, web'i etkinleştirme işleminin bir parçası olarak JSON Web Jetonlarının nasıl düzenleneceği açıklanmaktadır. mobil tabanlı uygulamaların Fleet Engine verilerine erişmesini sağlamamızdır. Henüz yapmadıysanız Fleet Engine'de güvenlik bölümündeki JSON Web Jetonları'nı okuyun bölümüne bakın. Fleet Engine hizmetiyle JWT'leri şu yöntemleri kullanabilirsiniz:

  • Yetkilendirme kitaplığını kullan: Google bu yaklaşımı kullanmanızı önerir. zaman harcamış olursunuz. Bu kitaplık, hizmette ihtiyaç duyabileceğiniz tüm kullanım alanı senaryoları için JWT'leri yayınlar ve uygulamanızı büyük ölçüde basitleştirir.
  • Kendi JWT'lerinizi oluşturun: JWT kitaplığımızı kullanamıyorsanız şunları yapmanız gerekir: kendi kod tabanınızda derleyin. Bu bölümde, proje yönetiminde JWT örnekleri verelim.

JWT'lerin işleyiş şekli

Cep telefonları ve web tarayıcıları gibi güvenilmeyen ortamlar için arka ucunuz sunucu aşağıdaki gibi çalışan JWT'ler yayınlar:

  • Düşük güven ortamında çalışan istemci kodunuz sunucunuzu çağırıyor uygun JWT'yi istemek için, tamamen güvenilir bir ortamda çalışan kod Fleet Engine'e geçmek zorunda.

  • JWT'ler hizmet hesaplarıyla ilişkilendirilir, bu nedenle istekler Fleet Engine'e gönderilir JWT'yi imzalayan hizmet hesabıyla dolaylı olarak ilişkilendirilir.

  • JWT talepleri, müşterinin üzerinde çalışabileceği kaynakları daha fazla kısıtlar. temel bilgileri de içerir.

Java için yetkilendirme kitaplığını kullanma

Java için Fleet Engine yetkilendirme kitaplığını kullanmak istiyorsanız GitHub'a gidin depo. Kitaplık, Fleet Engine'in yapımını basitleştirir JWT'leri kullanarak bunları güvenli bir şekilde imzalar. Sunulan bilgiler:

  • Proje bağımlılık beyanları
  • İsteğe bağlı geziler veya geziler için tüm hizmet hesabı rollerinin tam listesi planlanmış görevler
  • Kimlik bilgisi dosyaları kullanmaktan farklı jeton imzalama mekanizmaları (ör. bir hizmet hesabının kimliğine bürünme)
  • İmzalı jetonları, gRPC stub'ından veya Google API Codegen (GAPIC) istemci kitaplığından yapılan giden isteklere ekler.
  • İmzalayanları Fleet Engine istemci kitaplıklarıyla entegre etme talimatları

Kodunuzdan JWT yayınlıyorsanız

Java için yetkilendirme kitaplığını kullanamıyorsanız JWT'leri kendi kod tabanınızda uygulamanız gerekir. Bu bölümde, kendi profilinizi oluşturmanıza yardımcı olacak jeton. JWT alanlarının ve iddialarının listesi için Fleet Engine'da Güvenlik bölümündeki JSON Web Jetonları'na bakın. Bkz. Hizmet hesabı rollerine ilişkin daha fazla bilgi. Görüntüleyin isteğe bağlı gezilere yönelik JWT örneklerinin listesi için aşağıdaki bölüme görevlerden sorumlu tutmalısınız.

Genel yönergeler

  • Uygun hizmet hesaplarını ve rolleri kullanın. Hizmet hesabı ve ilişkili rol, jetonu isteyen kullanıcının jetonun erişim izni verdiği bilgileri görüntüleyebilir. Özellikle:
    • Mobil cihaza iletilmek üzere bir JWT'yi imzalıyorsanız hizmeti kullanın Sürücü veya Tüketici SDK'sı rolünün bir hesabı vardır. Aksi halde, mobil verileri değiştirebilir ve erişmemesi gereken verilere erişebilir.
    • Özel çağrılar için kullanılacak JWT'yi imzalıyorsanız şu hizmeti kullanın: hesabı için doğru Fleet Engine Yöneticisi rolüne sahip olmanız gerekir. Aksi takdirde işlem başarısız olur.
  • Yalnızca oluşturulan jetonları paylaşın. Jetonları oluşturmak için kullanılan kimlik bilgilerini hiçbir zaman paylaşmayın.
  • gRPC çağrılarında jetonun takılma mekanizması kullanılan dil ve çerçevedir. Bir çağrısına hamiline ait bir Authorization başlığı eklemektir değeri jeton olan jeton.
  • Geçerlilik bitiş zamanı döndürür. Sunucunuz, jeton için genellikle saniye cinsinden bir son kullanma zamanı döndürmelidir.
  • Doğrudan jeton sahibi olarak bir JSON dosyası oluşturup imzalamanız gerekiyorsa OAuth 2.0 erişim jetonlarını kullanmak yerine Hizmet OAuth olmadan hesap yetkilendirmesi Geliştirici dokümanları.

İsteğe bağlı geziler için

  • JWT yükünü oluştururken yetkilendirmeye ek bir talep ekleyin vehicleid veya tripid anahtarının aracın değerine ayarlandığı bölüm Aramanın yapıldığı kimlik veya gezi kimliği.

Planlanmış görevler için

  • Sunucunuz diğer API'leri çağırdığında jetonlar, uygun hak talebi. Bunun için şunları yapabilirsiniz:
    • Her anahtarın değerini * olarak ayarlayın.
    • Kullanıcıya tüm taskids ve deliveryvehicleids için erişim izni verin. Yapılacaklar Bu işlemin ardından, yetkilendirme bölümüne taskid ve deliveryvehicleid tuşlarını kullanın.
    • taskids hak talebinde yıldız işareti (*) kullanıldığında dizideki tek öğedir.

İsteğe bağlı geziler için JWT örnekleri

Bu bölümde, isteğe bağlı olarak reklam kullanıyorsanız sık karşılaşılan senaryolar için JWT örnekleri verilmiştir. kullanabilirsiniz.

Sürücü uygulaması işlemi için örnek jeton

{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "private_key_id_of_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": {
     "vehicleid": "driver_12345"
   }
}

Tüketici uygulaması işlemi için örnek jeton

{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "private_key_id_of_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": {
     "tripid": "trip_54321"
   }
}

Planlanmış görevler için JWT örnekleri

Bu bölümde, zamanlanmış reklam biçimi kullanıyorsanız görevlerden biridir.

Sürücü uygulaması için örnek jeton

    {
      "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"
       }
    }

Tüketici uygulaması için örnek jeton

    {
      "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"
       }
    }

Filo işlemleri için JWT örnekleri

Bu bölümde, filo operasyonlarındaki tipik bir senaryo için JWT örneği verilmiştir.

Bir filodaki tüm görevleri ve araçları izlemek için örnek jeton

Aşağıdaki örnek, bir operatör tarafından kullanılan web tabanlı bir uygulamadan filodaki tüm görevleri ve araçları izleyen bir jetondur. Gerekli izinler istemci uygulamalarına göre daha fazladır. Görüntüleyin İstemci tarafı için JavaScript Filo İzleme Kitaplığı'nı ayarlama yeni bir etiket oluşturabilirsiniz:

  • Fleet Engine Delivery Fleet Reader Cloud IAM'ini kullanarak jetonu imzalayın çok önemlidir.

   {
      "alg": "RS256",
      "typ": "JWT",
      "kid": "private_key_id_of_consumer_service_account"
    }
    .
    {
      "iss": "superuser@yourgcpproject.iam.gserviceaccount.com",
      "sub": "superuser@yourgcpproject.iam.gserviceaccount.com",
      "aud": "https://fleetengine.googleapis.com/",
      "iat": 1511900000,
      "exp": 1511903600,
      "scope": "https://www.googleapis.com/auth/xapi",
      "authorization": {
         "taskid": "*",
         "deliveryvehicleid": "*",
       }
    }

Arka uç sunucu işlemleri için alternatif kimlik doğrulama yöntemi

Google, arka uç sunucu işlemlerinin kimliğini doğrulamak için ADC'yi kullanmanızı önerir. Eğer ADC kullanamazsınız ve JWT'leri kullanmanız gerekiyorsa bu örneklere bakın.

İsteğe bağlı arka uç sunucu işlemi için örnek jeton

  {
    "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": {
       "vehicleid": "*",
       "tripid": "*"
     }
  }
  

Planlanmış arka uç sunucu işlemi için örnek jeton

    {
      "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": "*"
       }
    }
   

Planlanmış arka uç sunucusu toplu görev oluşturma işlemi için örnek jeton

    {
      "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": ["*"]
       }
    }
  

Planlanmış bir arka uç sunucusu araç başına teslim işlemi için örnek jeton

    {
      "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": "*"
       }
    }
  

Sırada ne var?

  • Deneme aracı oluşturmak ve jetonlarınızın amaçlandığı gibi çalıştığından emin olmak için kurulumunuzu doğrulayın.
  • Arka uç sunucu işlemleri için JWT'ler yerine ADC kullanma hakkında bilgi edinmek istiyorsanız Güvenliğe genel bakış başlıklı makaleyi inceleyin.