JSON Web Jetonları Sorun

Bu belgede, web ve mobil tabanlı uygulamalarınızın Fleet Engine verilerine erişimini etkinleştirmenin bir parçası olarak JSON Web Jetonlarının nasıl verileceği açıklanmaktadır. Henüz yapmadıysanız Filo Motoru'nda Güvenlik bölümündeki JSON Web Jetonları'nı okuyun. Fleet Engine hizmetiyle, JWT'leri aşağıdaki yöntemlerden biriyle verebilirsiniz:

  • Yetkilendirme kitaplığını kullanma: Google, kod tabanınız Java ile yazıldığında bu yaklaşımı kullanmanızı önerir. Bu kitaplık, hizmetle ilgili ihtiyaç duyabileceğiniz tüm kullanım alanı senaryoları için JWT'lerin verilmesini sağlar ve uygulamanızı büyük ölçüde basitleştirir.
  • Kendi JWT'lerinizi oluşturun: JWT kitaplığımızı kullanamıyorsanız bunları kendi kod tabanınıza eklemeniz gerekir. Bu bölümde, her senaryo için çeşitli JWT örnekleri verilmektedir.

JWT'lerin işleyiş şekli

Mobil telefonlar ve web tarayıcıları gibi güvenilmeyen ortamlarda arka uç sunucunuz, aşağıdaki şekilde çalışan JWT'ler yayınlar:

  • Düşük güvenli bir ortamda çalışan istemci kodunuz, Fleet Engine'e iletilecek uygun JWT'yi istemek için tam güvenli bir ortamda çalışan sunucu kodunuzu çağırır.

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

  • JWT talepleri, istemcinin üzerinde işlem yapabileceği kaynakları (ör. belirli araçlar, geziler veya görevler) daha da kısıtlar.

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

Java için Fleet Engine yetkilendirme kitaplığını kullanmak üzere GitHub deposunu ziyaret edin. Kitaplık, Fleet Engine JWT'lerinin oluşturulmasını kolaylaştırır ve bunları güvenli bir şekilde imzalar. Aşağıdakileri sağlar:

  • Proje bağımlılığı beyanları
  • İsteğe bağlı geziler veya planlanmış görevler için tüm hizmet hesabı rollerinin tam listesi
  • Kimlik bilgisi dosyalarını kullanmanın dışında jeton imzalama mekanizmaları (ör. hizmet hesabının kimliğine bürünme)
  • İmzalı jetonları, gRPC saplaması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'ler 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 jetonlarınızı oluşturmayla ilgili birkaç yönerge verilmiştir. JWT alanlarının ve taleplerinin listesi için Filo Motoru'nda Güvenlik bölümündeki JSON Web Jetonları'na bakın. Fleet Engine tarafından kullanılan hizmet hesabı rolleri için Hizmet hesabı rolleri başlıklı makaleyi inceleyin. İsteğe bağlı yolculuklar veya planlanmış görevler için JWT örneklerinin listesini görmek üzere aşağıdaki bölüme bakın.

Genel yönergeler

  • Uygun hizmet hesaplarını ve rollerini kullanın. Hizmet hesabı ve ilişkili rol, jeton isteyen kullanıcının jetonun erişim izni verdiği bilgileri görüntüleme yetkisine sahip olmasını sağlar. Ayrıntılı olarak:
    • Mobil cihaza iletilecek bir JWT'yi imzalarken, sürücü veya tüketici SDK'sı rolü için hizmet hesabını kullanın. Aksi takdirde, mobil cihaz, erişmemesi gereken verileri değiştirebilir ve bu verilere erişebilir.
    • Ayrıcalıklı çağrılar için kullanılacak JWT'yi imzalarken, ADC veya JWT'leri kullanırken doğru Fleet Engine Yönetici rolüne sahip hizmet hesabını kullanın. Aksi takdirde işlem başarısız olur.
  • Yalnızca oluşturulan jetonları paylaşın. Jeton oluşturmak için kullanılan kimlik bilgilerini asla paylaşmayın.
  • gRPC çağrıları için jeton ekleme mekanizması, çağrı yapmak için kullanılan dile ve çerçeveye bağlıdır. HTTP çağrısına jeton belirtme mekanizması, değeri jeton olan bir taşıyıcı jetonla Authorization üst bilgisini eklemektir.
  • Geçerlilik bitiş zamanını döndürür. Sunucunuz, jetonun geçerlilik bitiş zamanını (genellikle saniye cinsinden) döndürmelidir.
  • OAuth 2.0 erişim jetonlarını kullanmak yerine doğrudan jeton taşıyıcı olarak bir JSON oluşturup imzalamanız gerekiyorsa, Identity Geliştirici belgelerindeki OAuth olmadan hizmet hesabı yetkilendirme ile ilgili talimatları inceleyin.

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

  • JWT yükünü oluştururken yetkilendirme bölümüne, vehicleid veya tripid anahtarı, çağrının yapıldığı araç kimliğinin ya da gezi kimliğinin değerine ayarlanmış ek bir talep ekleyin.

Planlanmış görevler için

  • Sunucunuz diğer API'leri çağırdığında jetonlar da uygun talebi içermelidir. Bunun için aşağıdakileri yapabilirsiniz:
    • Her anahtarın değerini * olarak ayarlayın.
    • Kullanıcıya tüm taskids ve deliveryvehicleids erişim izni verin. Bunu yapmak için yetkilendirme bölümüne taskid ve deliveryvehicleid anahtarlarıyla ek bir talep eklersiniz.
    • taskids talebinde yıldız işareti (*) kullanıldığında bu işaret, dizideki tek öğe olmalıdır.

Talep üzerine yolculuklar için JWT örnekleri

Bu bölümde, talep üzerine yolculukları kullanıyorsanız yaygın senaryolar için JWT örnekleri verilmiştir.

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, planlanmış görevleri kullanıyorsanız tipik senaryolar için JWT örneği verilmiştir.

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

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. Bu işlemler için gereken izinler, istemci uygulamaları için gerekenden daha fazladır. Bu jetonu kullanacak istemci tarafı uygulaması için JavaScript Fleet Tracking Library'yi ayarlama başlıklı makaleyi inceleyin:

  • Fleet Engine Delivery Fleet Reader Cloud IAM rolünü kullanarak jetonu imzalayın.

   {
      "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ç sunucusu 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. ADC'yi kullanamıyor ve JWT'leri kullanmanız gerekiyorsa bu örneklere bakın.

İsteğe bağlı arka uç sunucusu 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ış bir 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ış bir 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, teslimat aracı başına işlem 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şturabilmek ve jetonlarınızın amaçlandığı şekilde çalıştığından emin olabilmek için kurulumunuzu doğrulayın.
  • Arka uç sunucu işlemlerinde JWT'ler yerine ADC kullanma hakkında bilgi için Güvenliğe genel bakış bölümüne bakın.