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'de güvenlik bölümündeki JSON Web Jetonları'nı okuyun bölümüne bakın. Fleet Engine hizmetiyle JWT'leri aşağıdaki yöntemlerden biriyle yayınlayabilirsiniz:

  • 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, her senaryo için JWT'lerin çeşitli örnekleri verilmiştir.

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, 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'a gidin depo. 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ı geziler veya geziler için tüm hizmet hesabı rollerinin tam listesi planlanmış görevler
  • Kimlik bilgisi dosyalarını kullanma dışındaki 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 oluşturmanız önerilir. Bu bölümde, kendi profilinizi oluşturmanıza yardımcı olacak jeton. Fleet Engine'de Güvenlik bölümündeki JSON Web Jetonları'na bakın JWT alanları ve hak talepleri listesini inceleyebilirsiniz. Bkz. Hizmet hesabı rollerine ilişkin daha fazla bilgi. İsteğe bağlı seyahatler veya planlanmış görevler için JWT örnekleri listesi için aşağıdaki bölüme bakın.

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:
    • 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. Şu işlem için kullandığınız kimlik bilgilerini asla paylaşmayın: jetonlar oluşturulur.
  • 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. 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. Sunucunuzun, birkaç saniye içinde tamamlanır.
  • 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 aşağıdakileri yapabilirsiniz:
    • Her anahtarın değerini * olarak ayarlayın.
    • Kullanıcıya tüm taskids ve deliveryvehicleids için 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.

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

Bu bölümde, isteğe bağlı web sitesi 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"
   }
}

Bir 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ı takip etmeye yönelik ö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. 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 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ış bir arka uç sunucusu görevleri toplu 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şturabilmek için kurulumunuzu doğrulayın. jetonlarınız beklendiği gibi çalışıyor
  • 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.