Yalıtılmış web uygulamaları

Web, gerçekten benzersiz bir uygulama platformudur. Bu platformda oluşturulan uygulamalara, kod değişikliği veya derleme gerekmeden herhangi bir işletim sisteminde anında erişilebilir. Kullanıcılar uygulamanıza her geldiğinde en güncel sürümü kullanır. Bu uygulamalar yüklenebilir ve çevrimdışı çalışabilir. Çok yetenekli olan bu uygulamaları tek bir bağlantıyla kolayca paylaşabilirsiniz. Web uygulaması oluşturun ve her yerde çalıştırın.

Web'in varsayılan olarak güvenli olması amaçlandığından güvenlik modelinin çok muhafazakar olması gerekir. Eklenen tüm yeni özellikler, sıradan bir kullanıcının URL üzerinden yanlışlıkla karşılaşabileceği şekilde güvenli olmalıdır. Bu güvenlik modeline drive-by web diyoruz. Bu, birçok uygulama için harika olsa da Content Security Policies ve kaynaklar arası izolasyon kullanılarak daha güvenli hale getirilebilir. Ancak her kullanım alanı için uygun değildir. Geliştiricilerin ihtiyaç duyduğu Direct Sockets ve Controlled Frame gibi çok önemli ve güçlü API'ler, drive-by web için yeterince güvenli hale getirilemiyor.

Bu uygulamalar için şu anda web'de geliştirme seçeneği bulunmamaktadır. Diğerleri için ise web'in güvenlik modeli yeterince muhafazakar olmayabilir. Bu kullanıcılar, sunucunun güvenilir olduğu varsayımını paylaşmayabilir ve bunun yerine ayrı ayrı sürüm oluşturulmuş ve imzalanmış bağımsız uygulamaları tercih edebilir. Yeni ve yüksek güvene sahip bir güvenlik modeli gerekiyor. İzole web uygulamaları (IWA'lar), bu geliştiricilerin çalışmalarını sağlamak için mevcut web platformunun üzerine inşa edilmiş izole, paketlenmiş, sürüm oluşturulmuş, imzalı ve güvenilir bir uygulama modeli sunar.

Web'de güven spektrumu

Web'deki güvenlik ve özellikleri bir spektrum olarak düşünebilirsiniz.

Web'deki güven spektrumunu gösteren bir resim. Sol tarafta, web'i temsil eden bir dünya. Ortada Progresif Web Uygulamaları. Sağ tarafta, içinde Japon balığı olan bir balık kasesi (yalıtılmış web uygulamalarını temsil eder). Düz siyah bir çizgi üç simgeyi de yatay olarak birbirine bağlıyor ve kesikli kırmızı bir çizgi, Progresif Web Uygulamaları ile İzole Edilmiş Web Uygulamaları'nı birbirinden ayırıyor.

Soldaki drive-by web, en erişilebilir olması gerektiğinden en düşük güvenliğe sahip güvenlik modelidir ve bu nedenle kullanıcının sistemine en az erişimi vardır. Tarayıcıya yüklenen web uygulamaları, ortada biraz daha fazla güven kazanır ve kullanıcının sistemine biraz daha derinlemesine entegre olabilir. Kullanıcılar genellikle uygulamaların tarayıcıda yüklü sürümleri ile web'de kullanılan sürümleri arasında sorunsuz bir şekilde geçiş yapabilir.

Ardından, yüksek güvene sahip yalıtılmış web uygulamaları gelir.

Bu uygulamalar, yerel uygulamalar gibi çalışır ve görünür. Ayrıca derin sistem entegrasyonlarına ve güçlü özelliklere erişebilir. Kullanıcılar, bu öğeler ile drive-by-web arasında geçiş yapamaz. Bu güvenlik düzeyine veya özelliklere ihtiyacınız varsa geri dönemezsiniz.

Bu spektrumda nereyi hedeflemeniz gerektiğine karar vermeye çalışırken, Progresif Web Uygulaması gibi mümkün olan en düşük güvene sahip güvenlik modelini kullanın. Bu, en geniş erişimi sağlar, en az sayıda güvenlik endişesini kendiniz yönetmenizi gerektirir ve geliştiricileriniz ile kullanıcılarınız için en esnek seçenek olur.

Güvenli tasarım

Yalıtılmış web uygulamaları, web uygulamaları için yüksek güvenilirliğe sahip bir güvenlik modeli sunar. Ancak bunu etkinleştirmek için web üzerinden sürücülerin güvenle ilgili yaptığı bazı varsayımların yeniden düşünülmesi gerekir. Sunucular ve DNS gibi temel web yapı taşlarına artık açıkça güvenilemez. Yerel uygulamalar için daha alakalı gibi görünen saldırı vektörleri aniden önem kazanır. Bu nedenle, IWA'lar tarafından sağlanan yeni yüksek güvenli güvenlik modeline erişmek için web uygulamalarının paketlenmesi, yalıtılması ve kilitlenmesi gerekir.

Paketlenmiş

Yalıtılmış web uygulamaları için sayfalar ve öğeler, canlı sunuculardan sunulamaz veya normal web uygulamaları gibi ağ üzerinden getirilemez. Bunun yerine, yeni yüksek güvenli güvenlik modeline erişmek için web uygulamalarının, çalışmak için ihtiyaç duydukları tüm kaynakları Signed WebBundle'a paketlemeleri gerekir. İmzalı web paketleri, bir siteyi çalıştırmak için gereken tüm kaynakları alıp .swbn dosyası içinde paketler ve bunları bir bütünlük bloğu ile birleştirir. Bu sayede web uygulaması güvenli bir şekilde tamamen indirilebilir ve çevrimdışı durumdayken bile paylaşılabilir veya yüklenebilir.

Ancak bu durum, bir sitenin kodunun gerçekliğini doğrulama konusunda sorun yaratır: TLS anahtarlarının çalışması için internet bağlantısı gerekir. TLS anahtarları yerine, IWA'lar güvenli bir şekilde çevrimdışı tutulabilen bir anahtarla imzalanır. İyi haber şu ki, tüm üretim dosyalarınızı bir klasörde toplayabilirseniz bu klasörü fazla değişiklik yapmadan IWA'ya dönüştürebilirsiniz.

İmzalama anahtarları oluşturma

İmzalama anahtarları, Ed25519 veya ECDSA P-256 anahtar çiftleridir. Özel anahtar, paketi imzalamak için, ortak anahtar ise paketi doğrulamak için kullanılır. Ed25519 veya ECDSA P-256 anahtarı oluşturmak ve şifrelemek için OpenSSL'yi kullanabilirsiniz:

# Generate an unencrypted Ed25519 key
openssl genpkey -algorithm Ed25519 -out private_key.pem

# or generate an unencrypted ECDSA P-256 key
openssl ecparam -name prime256v1 -genkey -noout -out private_key.pem

# Encrypt the generated key. This will ask for a passphrase, make sure to use a strong one
openssl pkcs8 -in private_key.pem -topk8 -out encrypted_key.pem

# Delete the unencrypted key
rm private_key.pem

İmzalama anahtarlarının ikincil bir amacı da vardır. Bir alan, sunucu gibi kontrol kaybına karşı savunmasız olabileceğinden yüklü IWA'yı tanımlamak için kullanılamaz. Bunun yerine, IWA, paketin imzasının bir parçası olan ve özel anahtara bağlı olan ortak anahtarla tanımlanır. Bu, sürücü tabanlı web'in çalışma şeklini önemli ölçüde değiştirir. Bu nedenle, IWA'lar HTTPS yerine yeni bir şema kullanır:isolated-app://.

Uygulamanızı paketleme

İmzalama anahtarınız hazır olduğunda web uygulamanızı paketlemenin zamanı gelmiştir. Bunu yapmak için IWA'larınızı paketleyip imzalamak üzere resmi NodeJS paketlerini kullanabilirsiniz (Go komut satırı araçları da kullanılabilir). Öncelikle, tüm IWA'nızın üretim dosyalarını (burada dist) içeren klasöre işaret eden wbn paketini kullanarak bunları imzalanmamış bir pakete sarmalayın:

npx wbn --dir dist

Bu işlem, söz konusu dizinin imzasız bir web paketini oluşturur. out.wbn. Oluşturulduktan sonra, daha önce oluşturduğunuz şifrelenmiş Ed25519 veya ECDSA P-256 anahtarını kullanarak wbn-sign ile imzalayın:

npx wbn-sign -i out.wbn -k encrypted_key.pem -o signed.swbn

Bu işlem, signed.swbn adlı imzasız web paketinden imzalı bir web paketi oluşturur. Araç, imzalandıktan sonra web paketi kimliğini ve yalıtılmış web uygulaması kaynağını da verir. Yalıtılmış web uygulaması kaynağı, IWA'nızın tarayıcıda nasıl tanımlandığıdır.

Web Bundle ID: ggx2sheak3vpmm7vmjqnjwuzx3xwot3vdayrlgnvbkq2mp5lg4daaaic
Isolated Web App Origin: isolated-app://ggx2sheak3vpmm7vmjqnjwuzx3xwot3vdayrlgnvbkq2mp5lg4daaaic/

Webpack, Rollup veya eklentilerini destekleyen bir araç (ör. Vite) kullanıyorsanız bu paketleri doğrudan çağırmak yerine bunları sarmalayan bir paketleyici eklentisi (Webpack, Rollup) kullanabilirsiniz. Bu işlem, derlemenizin çıkışı olarak imzalı bir paket oluşturur.

Uygulamanızı test etme

IWA'nızı iki şekilde test edebilirsiniz: Geliştirme sunucunuzu Chrome'un yerleşik IWA geliştirici proxy'si üzerinden çalıştırarak veya paketlenmiş IWA'nızı yükleyerek. Bunu yapmak için Chrome veya ChromeOS 120 ya da sonraki bir sürümü kullanmanız, IWA işaretlerini etkinleştirmeniz ve uygulamanızı Chrome'un Web Uygulaması İç İşleyişi aracılığıyla yüklemeniz gerekir:

  1. chrome://flags/#enable-isolated-web-app-dev-mode işaretini etkinleştirin.
  2. Chrome'un Web Uygulaması İç İşleyişi sayfasına giderek IWA'nızı test edin: chrome://web-app-internals

Web Uygulaması İç İşleyişi sayfasında Install IWA with Dev Mode Proxy veya Install IWA from Signed Web Bundle olmak üzere iki seçeneğiniz vardır.

Geliştirici Modu Proxy'si üzerinden yükleme yaparsanız yerel geliştirme sunucusundan çalışan siteler de dahil olmak üzere tüm URL'leri, diğer IWA yükleme koşullarını karşılamaları şartıyla paketlemeden IWA olarak yükleyebilirsiniz. Yüklendikten sonra, sisteminize doğru güvenlik politikaları ve kısıtlamalarla birlikte söz konusu URL için bir IWA eklenir ve yalnızca IWA'ya özel API'lere erişim sağlanır. Rastgele bir tanımlayıcı atanır. Uygulamanızda hata ayıklamanıza yardımcı olmak için bu modda Chrome Geliştirici Araçları da kullanılabilir. İmzalı bir Web Bundle'dan yükleme yaparsanız imzalı, paketlenmiş IWA'nızı yüklersiniz ve bu IWA, son kullanıcı tarafından indirilmiş gibi yüklenir.

Web App Internals sayfasında, güncelleme sürecini test etmek için Geliştirici Modu Proxy'si aracılığıyla veya imzalı bir web paketinden yüklenen uygulamalar için güncelleme kontrollerini de zorlayabilirsiniz.

İzole edilmiş

Yalıtılmış web uygulamalarında güven çok önemlidir. Bu, nasıl çalıştıklarıyla başlar. Kullanıcılar, bir uygulamanın tarayıcıda mı yoksa bağımsız bir pencerede mi çalıştığına bağlı olarak yapabilecekleri ve yapmaları gerekenler konusunda farklı zihinsel modellere sahiptir. Genellikle bağımsız uygulamaların daha fazla erişime sahip olduğuna ve daha güçlü olduğuna inanırlar. IWAs, yüksek güvenli API'lere erişebildiğinden bu zihinsel modele uygun olarak bağımsız bir pencerede çalıştırılması gerekir. Bu işlem, onları tarayıcıdan görsel olarak ayırır. Ancak bu, görsel ayrımın ötesine geçer.

Yalıtılmış web uygulamaları, tarayıcı içi web sitelerinden farklı bir protokolde çalışır (isolated-app ile http veya https karşılaştırması). Bu nedenle, aynı şirket tarafından oluşturulmuş olsalar bile her IWA, aynı kaynak politikası sayesinde tarayıcı içi web sitelerinden tamamen ayrılır. IWA depolama alanı da birbirinden ayrıdır. Bu sayede, kaynaklar arası içeriklerin farklı IWA'lar arasında veya IWA'lar ile kullanıcının normal tarama bağlamı arasında sızdırılamaması sağlanır.

Ancak bir IWA, yüklemeden sonra rastgele kod indirebilir ve çalıştırabilirse ne izolasyon ne de bir sitenin kodunu paketleme ve imzalama, güven oluşturmak için yararlıdır. İçerik için diğer sitelere bağlanmalarına izin verirken bunu sağlamak amacıyla IW'ler, sıkı bir İçerik Güvenliği Politikası grubu uygular:

  • Yalnızca paketteki JavaScript'e izin verir ancak kaynağı ne olursa olsun Wasm'ın çalıştırılmasına izin verir. (script-src)
  • JavaScript'in güvenli, yerel olmayan ana makine dışı kaynak alanlarından veri getirmesine, WebSocket ve WebTransport uç noktalarına bağlanmasına, blob ve data URL'lerini kullanmasına izin verir (connect-src).
  • DOM manipülasyon işlevlerinin nasıl kullanılabileceğini düzenleyerek DOM siteler arası komut dosyası ekleme (XSS) saldırılarına karşı koruma sağlar (require-trusted-types-for).
  • Herhangi bir HTTPS alanından gelen çerçevelere, resimlere, seslere ve videolara izin verir (frame-src, img-src, media-src)
  • Paketteki ve blob'lardaki yazı tiplerine izin verir. (font-src)
  • Satır içi CSS'ye veya paketteki CSS'ye izin ver (style-src)
  • <object>, <embed>, ve <base> öğeleri kullanılamaz (object-src ve base-uri)
  • Yalnızca paketteki kaynaklara diğer CSP kapsamındaki istekler için izin verir (default-src)
Content-Security-Policy: script-src 'self' 'wasm-unsafe-eval';
  connect-src 'self' https: wss: blob: data:;
  require-trusted-types-for 'script';
  frame-src 'self' https: blob: data:;
  img-src 'self' https: blob: data:;
  media-src 'self' https: blob: data:;
  font-src 'self' blob: data:;
  style-src 'self' 'unsafe-inline';
  object-src 'none';
  base-uri 'none';
  default-src 'self';

Bu CSP'ler, kötü amaçlı olabilecek üçüncü taraf kodlarına karşı tam koruma sağlamak için yeterli değildir. IWA'lar ayrıca kaynaklar arası yalıtılmış olup üçüncü taraf kaynakların bunları etkileme olasılığını azaltmak için başlıklar ayarlar:

  • Yalnızca paketteki kaynaklara veya açıkça CORS'u desteklediği belirtilen merkezler arası kaynaklara izin verin. Bu kaynaklar, merkezler arası kaynak politikası (CORP) başlığı ayarlanmış veya crossorigin özelliği kullanılmış olmalıdır. (Cross-Origin-Embedder-Policy)
  • CORS olmayan kaynaklar arası istekleri engelle (Cross-Origin-Resource-Policy)
  • Göz atma bağlamını kaynaklar arası dokümanlardan süreç açısından izole ederek window.opener referanslarını ve genel nesne erişimini engeller. (Cross-Origin-Opener-Policy)
  • Sitenin bir çerçeveye veya iFrame'e yerleştirilmesini önleme (CSP, frame-ancestors)
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Resource-Policy: same-origin
Content-Security-Policy: frame-ancestors 'self'

Bu kısıtlamalar uygulandığında bile IWA'ların korunduğu bir potansiyel saldırı daha vardır: sıra bozma saldırıları. Sıra bozma saldırısı, kötü amaçlı üçüncü taraf içeriği beklenmedik bir şekilde bir sayfaya giderek (ör. doğrudan bir iç ayarlar sayfasına giderek) kafa karıştırıcı ve potansiyel olarak istismar edilebilir bir kullanıcı deneyimi oluşturmaya çalıştığında gerçekleşir. IWAs, harici sitelerden rastgele derin bağlantıya izin vermeyerek, uygulamaların yalnızca start_url, protokol işleyici, paylaşım hedefi gibi iyi tanımlanmış giriş noktalarına gidilerek veya başlatma işleyici aracılığıyla açılmasına izin vererek bunu önler.

Kilitlendi

Paketleme ve yalıtım, neyin çalışmasına izin verildiği ve nereden geldiği konusunda bir dizi garanti sunar. Ancak web'deki izinlerin dinamik yapısı nedeniyle, tek başlarına bir web uygulamasının yalnızca ihtiyaç duyduğu özellikleri kullandığını garanti edemezler. Farklı özelliklerin farklı güvenlik hususları olduğundan, bir kullanıcı veya yönetici, bir uygulamayı yüklemeden ya da güncellemeden önce Android ve iOS gibi diğer yerel uygulamalarda yapabildiği gibi, bir IWA'nın hangi izinleri kullanabileceğini denetlemek isteyebilir.

Bu durumu kolaylaştırmak için yalıtılmış web uygulamaları, tüm izin isteklerini varsayılan olarak engeller. Geliştiriciler, web uygulaması manifestlerine permissions_policy alanı ekleyerek ihtiyaç duydukları izni etkinleştirebilir. Bu alan, IWA'nın, veya birControlled Frame ya da bir iframe gibi herhangi bir alt çerçevenin isteyebileceği her izin için izin politikası yönergelerinin ve izin politikası izin verilenler listelerinin anahtar/değer çiftlerini içerir. Burada izin eklemek, iznin otomatik olarak verilmesini sağlamaz. Bunun yerine, bu özellik için istekte bulunulduğunda iznin istenmesini sağlar.

Örneğin, bir filo izleme IWA'sı oluşturduğunuzu düşünün. Kullanıcının konumunu istemek ve yerleştirilmiş bir haritanın da konum istemesi için IWA'nıza ihtiyacınız olabilir. Ayrıca, kullanıcıya etkileyici bir görünüm sunmak için yerleştirilmiş sitelerin tam ekran moduna geçebilmesini de isteyebilirsiniz. Bunu yapmak için web uygulaması manifestinizde aşağıdaki izin politikasını ayarlarsınız:

"permissions_policy": {
   "geolocation": [ "self", "https://map.example.com" ],
   "fullscreen": [ "*" ]
}

WebBundle'lar Permissions Policy üstbilgilerini de belirtebildiğinden yalnızca her ikisinde de belirtilen izinlere izin verilir ve ardından yalnızca her ikisinde de bulunan izin verilenler listelerindeki kaynaklara izin verilir.

Adlandırılmış ve sürüm oluşturulmuş

Normal web uygulamaları, kullanıcılar tarafından tanımlanmak için alan adlarına güvenir ve bu alanda sunulan kod değiştirilerek güncellenebilir. Ancak Isolated Web Apps ile ilgili güvenlik kısıtlamaları nedeniyle kimlik ve güncellemelerin farklı şekilde ele alınması gerekir. İlerleyici web uygulamalarına benzer şekilde, yalıtılmış web uygulamalarının da kullanıcılarınıza tanıtılabilmesi için web uygulaması manifest dosyasına ihtiyacı vardır.

Web uygulaması manifesti

Yalıtılmış web uygulamaları, PWA'lar gibi web uygulaması manifestleri için aynı ana manifest özelliklerini kullanır ancak bazı küçük farklılıklar vardır. Örneğin, display biraz farklı çalışır. Hem browser hem de minimal-ui, minimal-ui ekranına zorlanır. fullscreen ve standalone ise standalone ekranına zorlanır (ek display_override seçenekleri beklendiği gibi çalışır). Ayrıca, version ve update_manifest_url olmak üzere iki alan daha eklenmelidir:

  • version: Yalıtılmış web uygulamaları için zorunludur. Nokta (.) ile ayrılmış bir veya daha fazla tam sayıdan oluşan bir dize. Sürümünüz 1, 2, 3 gibi basit bir şey veya SemVer (1.2.3) gibi karmaşık bir şey olabilir. Sürüm numarası, ^(\d+.?)*\d$ normal ifadesiyle eşleşmelidir.
  • update_manifest_url: İsteğe bağlıdır ancak bir Web Uygulaması Güncelleme Manifesti'nin alınabileceği bir HTTPS URL'sini (veya test için localhost) işaret eden alanın kullanılması önerilir.

Yalıtılmış bir web uygulaması için en basit web uygulaması manifesti aşağıdaki gibi görünebilir:

{
  "name": "IWA Kitchen Sink",
  "version": "0.1.0",
  "update_manifest_url": "https://example.com/updates.json",
  "start_url": "/",
  "icons": [
    {
      "src": "/images/icon.png",
      "type": "image/png",
      "sizes": "512x512",
      "purpose": "any"
    },
    {
      "src": "/images/icon-mask.png",
      "type": "image/png",
      "sizes": "512x512",
      "purpose": "maskable"
    }
  ]
}

Web uygulaması güncelleme manifesti

Web Uygulaması Güncelleme Manifesti, belirli bir web uygulamasının her sürümünü açıklayan bir JSON dosyasıdır. JSON nesnesi, version, src ve channels içeren nesnelerin listesi olan version adlı bir zorunlu alan içerir:

  • version - Uygulamanın sürüm numarası, Web Uygulaması Manifesti'ndeki version alanı ile aynıdır.
  • src - Bu sürüm için barındırılan pakete (.swbn dosyası) yönlendiren HTTPS URL'si (veya test için localhost). Göreceli URL'ler, web uygulaması güncelleme manifesti dosyasına göre belirlenir.
  • channels - Bu sürümün parçası olduğu güncelleme kanalını tanımlayan bir dizeler listesi. Başka bir kanal seçilmediğinde kullanılacak birincil kanalı açıklamak için özel bir default kanal kullanılır.

Ayrıca, her kimlik için isteğe bağlı bir name özelliği içeren kanal kimliklerinizin bir nesnesi olan bir channels alanı da ekleyebilirsiniz. Bu alan, default kanalı da dahil olmak üzere, okunabilir bir ad sağlamak için kullanılır. name özelliğini içermeyen veya channels nesnesine dahil edilmeyen bir kanal, ad olarak kimliğini kullanır.

Minimum düzeyde bir güncelleme manifesti şu şekilde görünebilir:

{
  "versions": [
    {
      "version": "5.2.17",
      "src": "https://cdn.example.com/app-package-5.2.17.swbn",
      "channels": ["next", "5-lts", "default"]
    },
    {
      "version": "5.3.0",
      "src": "v5.3.0/package.swbn",
      "channels": ["next", "default"]
    },
    {
      "version": "5.3.1",
      "src": "v5.3.1/package.swbn",
      "channels": ["next"]
    },
  ],
  "channels": {
    "default": {
      "name": "Stable"
    },
    "5-lts": {
      "name": "5.x Long-term Stable"
    }
  }
}

Bu örnekte, default olarak etiketlenecek Stable, 5-lts olarak etiketlenecek 5.x Long-term Stable ve next olarak etiketlenecek next olmak üzere üç kanal vardır. 5-lts kanalındaki kullanıcılar 5.2.17 sürümünü, default kanalındaki kullanıcılar 5.3.0 sürümünü, next kanalındaki kullanıcılar ise 5.3.1 sürümünü alır.

Web uygulaması güncelleme manifestleri herhangi bir sunucuda barındırılabilir. Güncellemeler 4-6 saatte bir kontrol edilir.

Yönetici tarafından yönetilir

Yalıtılmış web uygulamaları ilk olarak yalnızca Chrome Enterprise tarafından yönetilen Chromebook'lara Yönetici paneli üzerinden bir yönetici tarafından yüklenebilecek.

Başlamak için Yönetici panelinizden Cihazlar > Chrome > Uygulamalar ve uzantılar > Kullanıcılar ve tarayıcılar'a gidin. Bu sekme, kuruluşunuzdaki kullanıcılar için Chrome Web Mağazası, Google Play ve web'den uygulama ve uzantı eklemenize olanak tanır. Öğe eklemek için ekranın sağ alt köşesindeki sarı renkli kayan ekle (+) düğmesini açıp eklenecek öğe türünü seçin.

Açıldığında, Yalıtılmış web uygulaması ekle etiketli, kare içinde kare simgesi gösterilir. Bu simgeyi tıkladığınızda OU'nuza IWA eklemek için bir modal açılır. Bunu yapmak için iki bilgiye ihtiyacınız vardır: IWA'nın Web Bundle kimliği (uygulamanızın ortak anahtarından oluşturulur ve uygulama paketlenip imzalandıktan sonra gösterilir) ve IWA'nın Web Uygulaması Güncelleme Manifesti'nin URL'si. Yüklendikten sonra, yönetici panelinin standart seçeneklerini kullanarak yönetebilirsiniz:

  • Yükleme politikası: IWA'nın nasıl yüklenmesini istediğiniz (zorunlu yükleme, zorunlu yükleme ve ChromeOS rafına sabitleme veya yüklemeyi engelleme).
  • Girişte başlat: IWA'nın nasıl başlatılmasını istediğinizi seçin. Kullanıcının manuel olarak başlatmasına izin verebilir, kullanıcı giriş yaptığında IWA'nın başlatılmasını zorlayabilir ancak kapatmasına izin verebilir veya kullanıcı giriş yaptığında başlatılmasını zorlayabilir ve kapatılmasını engelleyebilirsiniz.

Kaydedildikten sonra uygulama, bir sonraki politika güncellemesi söz konusu kuruluş birimindeki Chromebook'lara uygulandığında yüklenir. Yüklendikten sonra kullanıcının cihazı, 4-6 saatte bir Web Uygulaması Güncelleme Manifesti'ndeki güncellemeleri kontrol eder.

IWA'ları zorunlu yüklemenin yanı sıra, diğer web uygulamalarında olduğu gibi bazı izinleri de otomatik olarak verebilirsiniz. Bunu yapmak için Cihazlar > Chrome > Web özellikleri'ne gidip Kaynak ekle düğmesini tıklayın. Origin / site pattern field bölümüne IWA'nın web paketi kimliğini yapıştırın (isolated-app://, protokolü olarak otomatik olarak eklenir). Buradan pencere yönetimi, yerel yazı tipi yönetimi ve ekran izleme API'si dahil olmak üzere farklı API'ler için erişim düzeylerini (izin verilen/engellenen/ayarlanmamış) belirleyebilirsiniz. Etkinleştirilmesi için yöneticinin ek olarak onay vermesi gerekebilecek API'ler (ör. zorunlu ekran izleme API'si) için seçiminizi onaylamanızı isteyen ek bir iletişim kutusu açılır. İşlemi tamamladığınızda değişikliklerinizi kaydedin. Kullanıcılarınız, IWA'nızı kullanmaya başlayabilir.

Uzantılarla çalışma

Yalıtılmış web uygulamaları, kutudan çıktığı haliyle uzantılarla çalışmasa da sahip olduğunuz uzantıları bu uygulamalara bağlayabilirsiniz. Bunun için uzantının manifest dosyasını düzenlemeniz gerekir. Manifest dosyasının externally_connectable bölümü, uzantınızın hangi harici web sayfalarıyla veya diğer Chrome uzantılarıyla etkileşimde bulunabileceğini tanımlar. matches alanına IWA'nızın kaynağını ekleyin (isolated-app:// şemasını eklediğinizden emin olun):externally_connectable

{
  "externally_connectable": {
    "matches": ["isolated-app://79990854-bc9f-4319-a6f3-47686e54ed29/*"]
  }
}

Bu işlem, uzantınızın yalıtılmış web uygulamasında çalışmasına izin verir ancak içeriğin uygulamaya yerleştirilmesine izin vermez. Uzantı ile IWA'nız arasında yalnızca mesaj iletebilirsiniz.