JSON Web Jetonları Sorun

Bu dokümanda, web ve mobil tabanlı uygulamalarınızın Fleet Engine verilerine erişmesine olanak tanımak için JSON Web jetonlarının nasıl yayınlanacağı açıklanmaktadır. Henüz yapmadıysanız Fleet Engine'da Güvenlik bölümündeki JSON Web Jetonları bölümünü okuyun. Fleet Engine hizmetiyle JWT'leri aşağıdaki yöntemlerden biriyle yayınlayabilirsiniz:

  • Yetkilendirme kitaplığını kullanma: Google, kod tabanınız Java ile yazılmışsa bu yaklaşımı kullanmanızı önerir. 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 bunları kendi kod tabanınıza eklemeniz gerekir. Bu bölümde, her senaryo için JWT'lerin çeşitli örnekleri verilmiştir.

JWT'lerin işleyiş şekli

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

  • Güven düzeyi düşük bir ortamda çalışan istemci kodunuz, Fleet Engine'a iletilecek uygun JWT'yi istemek için tamamen güvenilir bir ortamda çalışan sunucu kodunuzu çağırır.

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

  • JWT, istemcinin çalışabileceği kaynakları (ör. belirli araçlar, geziler veya görevler) daha da kısıtladığını iddia ediyor.

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

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

  • Proje bağımlılık beyanları
  • İsteğe bağlı seyahatler veya planlanmış görevler için tüm hizmet hesabı rollerinin tam listesi
  • 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'ler gönderiyorsanı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 iddialarının listesi için Fleet Engine'da 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 bölümüne bakın. İsteğe bağlı seyahatler veya planlanmış görevler için JWT örnekleri listesini aşağıdaki bölümde bulabilirsiniz.

Genel yönergeler

  • Uygun hizmet hesaplarını ve rolleri kullanın. Hizmet hesabı ve ilişkili rol, jetonu isteyen kullanıcının jetonun kendisine erişim izni verdiği bilgileri görüntüleme yetkisine sahip olmasını sağlar. Ayrıntılı olarak:
    • Bir JWT'yi mobil cihaza iletilecek şekilde imzalıyorsanız Sürücü veya Tüketici SDK rolü için hizmet hesabını kullanın. Aksi takdirde mobil cihaz, erişmemesi gereken verileri değiştirebilir ve bunlara erişebilir.
    • JWT'yi ayrıcalıklı çağrılar için kullanılacak şekilde imzalıyorsanız ADC veya JWT'leri kullanırken doğru Fleet Engine yöneticisi rolüne sahip hizmet hesabını kullanın. 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ı için jetonu ekleme mekanizması, çağrıyı 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ı jetonu içeren bir Authorization üst bilgisi eklemektir.
  • Geçerlilik bitiş zamanını döndürme. Sunucunuz, jeton için genellikle saniye cinsinden bir son kullanma zamanı döndürmelidir.
  • OAuth 2.0 erişim jetonlarını kullanmak yerine doğrudan jeton taşıyıcı olarak JSON oluşturmanız ve imzalamanız gerekiyorsa Identity Developer dokümanlarında OAuth olmadan hizmet hesabı yetkilendirme ile ilgili talimatları okuyun.

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

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

Planlanmış görevler için

  • Sunucunuz diğer API'leri çağırdığında jetonlar uygun iddiayı da 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'lere erişim izni verin. Bunu yapmak için yetkilendirme bölümüne taskid ve deliveryvehicleid anahtarlarını içeren ek bir hak talebi eklersiniz.
    • taskids hak talebinde yıldız işareti (*) kullanıldığında, yıldız işareti dizideki tek öğe olmalıdır.

Talep üzerine seyahatler için JWT örnekleri

Bu bölümde, isteğe bağlı gezileri kullanıyorsanız sık karşılaşılan 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örevler 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 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. Bu işlemler için gereken izinler, istemci uygulamalarına kıyasla daha fazladır. Bu jetonu kullanacak istemci tarafı uygulama 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ç 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. ADC'yi kullanamıyorsanı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": ["*"]
       }
    }
  

Yayın aracı başına planlanmış 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": {
         "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 isterseniz Güvenliğe genel bakış başlıklı makaleyi inceleyin.