Ứng dụng web tách biệt

Web là một nền tảng ứng dụng thực sự độc đáo. Người dùng có thể truy cập ngay vào các ứng dụng được xây dựng trên nền tảng này trên mọi hệ điều hành mà không cần thay đổi mã hoặc biên dịch. Mỗi khi người dùng truy cập vào ứng dụng của bạn, họ luôn có phiên bản mới nhất. Chúng có thể cài đặt và hoạt động ở chế độ ngoại tuyến, có nhiều tính năng và rất dễ chia sẻ chỉ bằng một đường liên kết. Xây dựng một ứng dụng web và ứng dụng này sẽ hoạt động ở mọi nơi.

Vì web hướng đến việc đảm bảo an toàn và bảo mật theo mặc định, nên mô hình bảo mật của web cần phải rất thận trọng. Mọi chức năng mới được thêm vào đều phải an toàn để người dùng thông thường vô tình gặp phải thông qua một URL. Chúng tôi gọi mô hình bảo mật này là drive by web (tấn công qua web). Mặc dù điều này rất phù hợp với nhiều ứng dụng và có thể tăng cường bảo mật bằng cách sử dụng Chính sách bảo mật nội dungcơ chế cách ly nhiều nguồn, nhưng nó không phù hợp với mọi trường hợp sử dụng. Một số API thực sự quan trọng và rất mạnh mẽ, chẳng hạn như Direct SocketsControlled Frame mà nhà phát triển cần không thể đủ an toàn cho ổ đĩa bằng web.

Đối với những ứng dụng này, hiện tại, chúng không có lựa chọn xây dựng trên web. Đối với những người khác, mô hình bảo mật của web có thể không đủ thận trọng; họ có thể không chia sẻ giả định rằng máy chủ là đáng tin cậy, thay vào đó, họ thích các ứng dụng độc lập được ký và phân phiên bản riêng biệt. Bạn cần một mô hình bảo mật mới có độ tin cậy cao. Ứng dụng web tách biệt (IWA) cung cấp một mô hình ứng dụng tách biệt, đi kèm, có phiên bản, được ký và đáng tin cậy, được xây dựng dựa trên nền tảng web hiện có để hỗ trợ những nhà phát triển này.

Phổ tin cậy trên web

Bạn có thể coi tính bảo mật và các chức năng trên web là một phổ.

Hình minh hoạ thể hiện phổ tin cậy trên web. Ở bên trái, một quả địa cầu đại diện cho web dựa trên lượt truy cập. Ở giữa là Ứng dụng web tiến bộ. Ở bên phải, một bát cá có cá vàng bên trong, tượng trưng cho Ứng dụng web tách biệt. Một đường kẻ đen liền nét kết nối cả 3 biểu tượng theo chiều ngang và một đường kẻ đỏ nét đứt phân tách Ứng dụng web tiến bộ với Ứng dụng web tách biệt

Web tấn công ngầm ở bên trái có mô hình bảo mật tin cậy thấp nhất vì cần có khả năng truy cập cao nhất, do đó có ít quyền truy cập nhất vào hệ thống của người dùng. Các ứng dụng web được cài đặt trên trình duyệt có mức độ tin cậy cao hơn một chút và có thể tích hợp sâu hơn một chút vào hệ thống của người dùng. Người dùng thường có thể chuyển đổi giữa các phiên bản web chạy trực tiếp của ứng dụng và các phiên bản được cài đặt trên trình duyệt mà không gặp vấn đề gì.

Sau đó là các Ứng dụng web tách biệt có độ tin cậy cao.

Chúng hoạt động và có cảm giác giống như các ứng dụng gốc, đồng thời có thể truy cập vào các tính năng tích hợp sâu với hệ thống và các chức năng mạnh mẽ. Người dùng không thể chuyển đổi giữa các ứng dụng này và ứng dụng drive-by-web. Nếu cần mức độ bảo mật này hoặc những chức năng này, bạn sẽ không thể quay lại.

Khi cố gắng quyết định mục tiêu của bạn trên phổ này, hãy chuyển sang mô hình bảo mật có độ tin cậy thấp nhất mà bạn có thể, chẳng hạn như Ứng dụng web tiến bộ. Điều này sẽ giúp bạn tiếp cận được nhiều người dùng nhất, yêu cầu bạn tự quản lý ít mối lo ngại nhất về bảo mật và sẽ linh hoạt nhất cho nhà phát triển cũng như người dùng của bạn.

Thiết kế bảo mật

Ứng dụng web tách biệt cung cấp một mô hình bảo mật có độ tin cậy cao cho các ứng dụng web. Tuy nhiên, để làm được điều đó, bạn cần suy nghĩ lại một số giả định mà phương thức tấn công qua trình duyệt web đưa ra về độ tin cậy. Các khối xây dựng cốt lõi của web, chẳng hạn như máy chủ và DNS, không còn được tin cậy một cách rõ ràng nữa. Các vectơ tấn công có vẻ phù hợp hơn đối với các ứng dụng gốc đột nhiên trở nên quan trọng. Do đó, để có quyền truy cập vào mô hình bảo mật mới có độ tin cậy cao do IWA cung cấp, các ứng dụng web cần được đóng gói, tách biệt và khoá.

Đóng gói

Các trang và thành phần cho Ứng dụng web tách biệt không thể được phân phát từ các máy chủ đang hoạt động hoặc được tìm nạp qua mạng như các ứng dụng web thông thường. Thay vào đó, để có quyền truy cập vào mô hình bảo mật có độ tin cậy cao mới, các ứng dụng web cần đóng gói tất cả tài nguyên cần thiết để chạy vào một Signed WebBundle. Gói web đã ký lấy tất cả tài nguyên cần thiết để chạy một trang web và đóng gói chúng lại với nhau thành một tệp .swbn, nối chúng với một khối toàn vẹn. Điều này cho phép tải toàn bộ ứng dụng web xuống một cách an toàn, thậm chí chia sẻ hoặc cài đặt khi không có mạng.

Tuy nhiên, điều này gây ra vấn đề khi xác minh tính xác thực của mã trang web: Các khoá TLS cần có kết nối Internet để hoạt động. Thay vì khoá TLS, IWA được ký bằng một khoá có thể được giữ an toàn khi không có mạng. Tin vui là nếu có thể thu thập tất cả các tệp sản xuất vào một thư mục, bạn có thể chuyển thư mục đó thành một IWA mà không cần sửa đổi nhiều.

Tạo khoá ký

Khoá ký là cặp khoá Ed25519 hoặc ECDSA P-256, trong đó khoá riêng tư được dùng để ký gói và khoá công khai được dùng để xác minh gói. Bạn có thể sử dụng OpenSSL để tạo và mã hoá khoá Ed25519 hoặc ECDSA P-256:

# 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

Khoá ký cũng có mục đích thứ hai. Vì một miền có thể dễ bị mất quyền kiểm soát như một máy chủ, nên miền đó không thể dùng để xác định IWA đã cài đặt. Thay vào đó, IWA được xác định bằng khoá công khai của gói. Khoá này là một phần trong chữ ký của gói và được liên kết với khoá riêng tư. Đây là một thay đổi đáng kể đối với cách hoạt động của web dựa trên ổ đĩa, vì vậy thay vì sử dụng HTTPS, IWA cũng sử dụng một lược đồ mới: isolated-app://.

Đóng gói ứng dụng

Khi có khoá ký, bạn có thể bắt đầu đóng gói ứng dụng web. Để làm như vậy, bạn có thể dùng các gói NodeJS chính thức để đóng gói rồi ký các IWA (công cụ dòng lệnh Go cũng có sẵn). Trước tiên, hãy sử dụng gói wbn, trỏ đến thư mục chứa tất cả các tệp sản xuất của IWA (ở đây là dist) để gói chúng vào một gói chưa ký:

npx wbn --dir dist

Thao tác này sẽ tạo một gói web chưa ký của thư mục đó thành out.wbn. Sau khi tạo, hãy dùng khoá Ed25519 hoặc ECDSA P-256 đã mã hoá mà bạn đã tạo trước đó để ký bằng wbn-sign:

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

Thao tác này sẽ tạo một gói web đã ký từ gói web chưa ký có tên là signed.swbn. Sau khi ký, công cụ này cũng sẽ xuất Mã nhận dạng gói web và nguồn gốc của Ứng dụng web tách biệt. Nguồn gốc của Ứng dụng web tách biệt là cách IWA của bạn được xác định trong trình duyệt.

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

Nếu đang sử dụng Webpack, Rollup hoặc một công cụ hỗ trợ các trình bổ trợ của chúng (chẳng hạn như Vite), bạn có thể sử dụng một trong các trình bổ trợ gói (Webpack, Rollup) để bao bọc các gói này thay vì gọi trực tiếp. Thao tác này sẽ tạo một gói đã ký làm đầu ra của bản dựng.

Kiểm thử ứng dụng

Bạn có thể kiểm thử IWA theo một trong hai cách: chạy máy chủ phát triển thông qua proxy nhà phát triển IWA tích hợp của Chrome hoặc cài đặt IWA đi kèm. Để làm như vậy, bạn cần sử dụng Chrome hoặc ChromeOS phiên bản 120 trở lên, bật cờ IWA và cài đặt ứng dụng thông qua Web App Internals của Chrome:

  1. Bật cờ chrome://flags/#enable-isolated-web-app-dev-mode
  2. Kiểm thử IWA bằng cách chuyển đến trang Web App Internals (Thông tin nội bộ về ứng dụng web) của Chrome tại chrome://web-app-internals

Sau khi truy cập trang Web App Internals, bạn có 2 lựa chọn: Install IWA with Dev Mode Proxy hoặc Install IWA from Signed Web Bundle.

Nếu cài đặt thông qua một Proxy ở Chế độ nhà phát triển, bạn có thể cài đặt mọi URL (kể cả các trang web chạy từ một máy chủ phát triển cục bộ) dưới dạng một IWA mà không cần gói chúng, giả sử chúng đáp ứng các yêu cầu khác về việc cài đặt IWA. Sau khi được cài đặt, một IWA cho URL đó sẽ được thêm vào hệ thống của bạn cùng với các chính sách bảo mật và quy tắc hạn chế phù hợp, đồng thời bạn sẽ có quyền truy cập vào các API chỉ dành cho IWA. Nó sẽ được chỉ định một giá trị nhận dạng ngẫu nhiên. Công cụ cho nhà phát triển của Chrome cũng có sẵn ở chế độ này để giúp bạn gỡ lỗi ứng dụng. Nếu cài đặt từ một Signed Web Bundle, bạn sẽ tải IWA đã ký và được đóng gói lên, sau đó IWA này sẽ cài đặt như thể người dùng cuối đã tải xuống.

Trên trang Web App Internals (Nội dung bên trong của ứng dụng web), bạn cũng có thể buộc kiểm tra bản cập nhật cho mọi ứng dụng được cài đặt thông qua Dev Mode Proxy (Proxy chế độ nhà phát triển) hoặc từ một Signed Web Bundle (Gói web đã ký) để kiểm thử quy trình cập nhật.

Được tách biệt

Độ tin cậy là yếu tố then chốt đối với Ứng dụng web tách biệt. Điều này bắt đầu từ cách họ chạy. Người dùng có các mô hình tinh thần khác nhau về những gì một ứng dụng có thể và nên làm, tuỳ thuộc vào việc ứng dụng đó đang chạy trong trình duyệt hay trong một cửa sổ độc lập. Nhìn chung, họ tin rằng các ứng dụng độc lập có nhiều quyền truy cập hơn và mạnh mẽ hơn. Vì IWA có thể truy cập vào các API có độ tin cậy cao, nên chúng phải chạy trong một cửa sổ độc lập để phù hợp với mô hình tư duy này. Điều này giúp tách biệt các cửa sổ đó với trình duyệt. Tuy nhiên, tính năng này không chỉ giúp phân tách bằng hình ảnh.

Ứng dụng web tách biệt chạy trên một giao thức riêng biệt so với các trang web trong trình duyệt (isolated-app so với http hoặc https). Điều này có nghĩa là mỗi IWA hoàn toàn tách biệt với các trang web chạy trong trình duyệt, ngay cả khi chúng được xây dựng bởi cùng một công ty, nhờ vào chính sách cùng nguồn gốc. Bộ nhớ IWA cũng được tách biệt với nhau. Điều này cùng với nhau đảm bảo rằng nội dung trên nhiều nguồn gốc không thể bị rò rỉ giữa các IWA khác nhau hoặc giữa IWA và ngữ cảnh duyệt web thông thường của người dùng.

Tuy nhiên, cả việc cô lập lẫn việc gói và ký mã của một trang web đều không hữu ích cho việc thiết lập độ tin cậy nếu một IWA có thể tải xuống và chạy mã tuỳ ý sau khi cài đặt. Để đảm bảo điều này trong khi vẫn cho phép IWA kết nối với các trang web khác để lấy nội dung, IWA sẽ thực thi một bộ Chính sách bảo mật nội dung nghiêm ngặt:

  • Chỉ cho phép JavaScript từ gói; tuy nhiên, chính sách này cho phép Wasm chạy bất kể nguồn của Wasm. (script-src)
  • Cho phép JavaScript tìm nạp từ các miền chéo nguồn không phải localhost, bảo mật, kết nối WebSocket và các điểm cuối WebTransport, cũng như các URL blobdata (connect-src)
  • Bảo vệ chống lại các cuộc tấn công chèn tập lệnh trên nhiều trang web (XSS) trong DOM bằng cách điều chỉnh cách sử dụng các hàm thao tác DOM (require-trusted-types-for)
  • Cho phép khung hình, hình ảnh, âm thanh và video từ bất kỳ miền HTTPS nào (frame-src, img-src, media-src)
  • Cho phép phông chữ từ gói và blob (font-src)
  • Cho phép CSS cùng dòng hoặc CSS từ gói (style-src)
  • Bạn không thể dùng các phần tử <object>, <embed><base> (object-srcbase-uri)
  • Chỉ cho phép các tài nguyên trong gói cho mọi yêu cầu khác được CSP bao phủ (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';

Các CSP này không đủ để bảo vệ hoàn toàn khỏi mã độc hại tiềm ẩn của bên thứ ba. IWA cũng được cách ly trên nhiều nguồn, thiết lập tiêu đề để giảm khả năng các tài nguyên của bên thứ ba ảnh hưởng đến chúng:

  • Chỉ cho phép các tài nguyên từ gói hoặc các tài nguyên nhiều nguồn gốc được đánh dấu rõ ràng là hỗ trợ CORS bằng cách đặt tiêu đề chính sách về tài nguyên nhiều nguồn gốc (CORP) hoặc thuộc tính crossorigin. (Cross-Origin-Embedder-Policy)
  • Không cho phép các yêu cầu không có CORS trên nhiều nguồn gốc (Cross-Origin-Resource-Policy)
  • Xử lý cách ly bối cảnh duyệt web khỏi các tài liệu trên nhiều nguồn, ngăn chặn các tham chiếu window.opener và quyền truy cập vào đối tượng chung (Cross-Origin-Opener-Policy)
  • Ngăn trang web bị nhúng trong một khung hoặc iframe (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'

Ngay cả khi có những hạn chế này, vẫn còn một cuộc tấn công tiềm ẩn khác mà IWA có thể ngăn chặn: các cuộc tấn công phá vỡ trình tự. Tấn công phá vỡ chuỗi xảy ra khi nội dung độc hại của bên thứ ba cố gắng tạo ra trải nghiệm người dùng gây nhầm lẫn và có khả năng bị khai thác bằng cách chuyển đến một trang theo cách không mong muốn, chẳng hạn như chuyển trực tiếp đến một trang cài đặt nội bộ. IWA ngăn chặn điều này bằng cách không cho phép liên kết sâu tuỳ ý từ các trang web bên ngoài, chỉ cho phép mở các ứng dụng bằng cách chuyển đến các điểm truy cập được xác định rõ, chẳng hạn như start_url, trình xử lý giao thức, mục tiêu chia sẻ hoặc thông qua trình xử lý khởi chạy.

Đã khoá

Việc đóng gói và cách ly cung cấp một loạt các đảm bảo về những gì được phép chạy và nguồn gốc của nó, nhưng bản chất linh động của các quyền trên web có nghĩa là chỉ riêng các quyền này không thể đảm bảo rằng một ứng dụng web chỉ sử dụng những chức năng mà ứng dụng đó cần. Vì các chức năng khác nhau có những điểm cần cân nhắc về bảo mật khác nhau, nên người dùng hoặc quản trị viên sẽ muốn kiểm tra những quyền mà IWA có thể sử dụng, giống như họ có thể làm với các ứng dụng gốc khác như Android và iOS trước khi cài đặt hoặc cập nhật một ứng dụng.

Để tạo điều kiện thuận lợi cho việc này, theo mặc định, Các ứng dụng web tách biệt sẽ chặn tất cả các yêu cầu cấp quyền. Sau đó, nhà phát triển có thể chọn sử dụng quyền mà họ cần bằng cách thêm một trường permissions_policy vào Tệp kê khai ứng dụng web. Trường này chứa các cặp khoá/giá trị của chỉ thị chính sách về quyềndanh sách cho phép chính sách về quyền cho từng quyền mà IWA, hoặc bất kỳ khung con nào như Khung được kiểm soát hoặc iframe, có thể yêu cầu. Việc thêm một quyền ở đây không tự động cấp quyền đó; thay vào đó, quyền này sẽ có sẵn để được yêu cầu khi có yêu cầu về khả năng đó.

Hãy xem xét ví dụ về việc bạn đang tạo một IWA theo dõi đội xe. Bạn có thể cần IWA để có thể yêu cầu vị trí của người dùng và để một bản đồ được nhúng cũng yêu cầu vị trí. Bạn cũng có thể muốn mọi trang web được nhúng đều có thể chuyển sang chế độ toàn màn hình để mang đến cho người dùng chế độ xem sống động. Để làm như vậy, bạn sẽ thiết lập chính sách quyền sau đây trong Tệp kê khai ứng dụng web:

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

Vì WebBundle cũng có thể chỉ định tiêu đề Permissions Policy (Chính sách về quyền), nên chỉ những quyền được khai báo trong cả hai mới được phép và sau đó chỉ những nguồn gốc trong danh sách cho phép ở cả hai mới được phép.

Được đặt tên và đánh số phiên bản

Các ứng dụng web thông thường dựa vào tên miền để xác định danh tính của mình với người dùng và có thể được cập nhật bằng cách thay đổi mã được phân phát tại miền đó. Tuy nhiên, do các ràng buộc về bảo mật đối với Ứng dụng web riêng biệt, danh tính và các bản cập nhật cần được xử lý theo cách khác. Tương tự như Ứng dụng web có thể cài đặt, Ứng dụng web tách biệt cần có tệp Tệp kê khai ứng dụng web để xác định chúng cho người dùng.

Tệp kê khai ứng dụng web

Ứng dụng web tách biệt chia sẻ cùng các thuộc tính chính của tệp kê khai cho Tệp kê khai ứng dụng web của chúng dưới dạng PWA, với một số biến thể nhỏ. Ví dụ: display hoạt động hơi khác một chút; cả browserminimal-ui đều bị buộc vào màn hình minimal-ui, còn fullscreenstandalone đều bị buộc vào màn hình standalone (các lựa chọn display_override bổ sung hoạt động như mong đợi). Ngoài ra, bạn nên thêm 2 trường khác là versionupdate_manifest_url:

  • version: Bắt buộc đối với Ứng dụng web riêng biệt. Một chuỗi bao gồm một hoặc nhiều số nguyên được phân tách bằng dấu chấm (.). Phiên bản của bạn có thể là một phiên bản đơn giản như 1, 2, 3, v.v. hoặc một phiên bản phức tạp như SemVer (1.2.3). Số phiên bản phải khớp với biểu thức chính quy ^(\d+.?)*\d$.
  • update_manifest_url: Không bắt buộc, nhưng là trường được đề xuất trỏ đến một URL HTTPS (hoặc localhost để kiểm thử) nơi có thể truy xuất Tệp kê khai bản cập nhật ứng dụng web.

Tệp kê khai ứng dụng web tối thiểu cho một Ứng dụng web tách biệt có thể có dạng như sau:

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

Tệp kê khai cập nhật ứng dụng web

Tệp kê khai bản cập nhật ứng dụng web là một tệp JSON mô tả từng phiên bản của một ứng dụng web nhất định. Đối tượng JSON chứa một trường bắt buộc là version, đây là danh sách các đối tượng chứa version, srcchannels:

  • version – Số phiên bản của ứng dụng, giống với trường version của Tệp kê khai ứng dụng web
  • src – URL HTTPS (hoặc localhost để kiểm thử) trỏ đến gói được lưu trữ cho phiên bản đó (tệp .swbn). URL tương đối là URL tương đối so với tệp kê khai cập nhật ứng dụng web.
  • channels – Danh sách các chuỗi để xác định kênh cập nhật mà phiên bản này thuộc về. Một kênh default đặc biệt được dùng để mô tả kênh chính sẽ được dùng nếu không có kênh nào khác được chọn.

Bạn cũng có thể thêm trường channels, một đối tượng gồm mã nhận dạng kênh của bạn với thuộc tính name không bắt buộc cho từng mã nhận dạng để cung cấp tên dễ đọc (kể cả cho kênh default). Một kênh không có thuộc tính name hoặc không có trong đối tượng channels sẽ dùng mã nhận dạng làm tên.

Tệp kê khai cập nhật tối thiểu có thể có dạng như sau:

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

Trong ví dụ này, có 3 kênh: default sẽ được gắn nhãn Stable, 5-lts sẽ được gắn nhãn 5.x Long-term Stablenext sẽ được gắn nhãn next. Nếu người dùng đang sử dụng kênh 5-lts, họ sẽ nhận được phiên bản 5.2.17, nếu đang sử dụng kênh default, họ sẽ nhận được phiên bản 5.3.0 và nếu đang sử dụng kênh next, họ sẽ nhận được phiên bản 5.3.1.

Bạn có thể lưu trữ Tệp kê khai cập nhật ứng dụng web trên bất kỳ máy chủ nào. Hệ thống sẽ kiểm tra các bản cập nhật sau mỗi 4 đến 6 giờ.

Do quản trị viên quản lý

Trong lần ra mắt đầu tiên, Quản trị viên chỉ có thể cài đặt Các ứng dụng web riêng biệt trên Chromebook do Chrome Enterprise quản lý thông qua Bảng điều khiển dành cho quản trị viên.

Để bắt đầu, trên bảng điều khiển dành cho quản trị viên, hãy chuyển đến Thiết bị > Chrome > Ứng dụng và tiện ích > Người dùng và trình duyệt. Thẻ này cho phép bạn thêm ứng dụng và tiện ích từ Cửa hàng Chrome trực tuyến, Google Play và web cho người dùng trong tổ chức của bạn. Để thêm mục, hãy mở nút thêm nổi màu vàng (+) ở góc dưới cùng bên phải màn hình rồi chọn loại mục cần thêm.

Khi mở, sẽ có một biểu tượng hình vuông bên trong một hình vuông, có nhãn Thêm ứng dụng web tách biệt. Khi nhấp vào biểu tượng này, một phương thức sẽ mở ra để thêm IWA vào OU của bạn. Để làm như vậy, bạn cần có hai thông tin: Mã nhận dạng gói web của IWA (được tạo từ khoá công khai của ứng dụng và hiển thị sau khi ứng dụng được đóng gói và ký) và URL đến Tệp kê khai bản cập nhật ứng dụng web cho IWA. Sau khi cài đặt, bạn sẽ có bộ lựa chọn tiêu chuẩn của bảng điều khiển Quản trị để quản lý ứng dụng này:

  • Chính sách cài đặt: Cách bạn muốn cài đặt IWA, có thể là buộc cài đặt, buộc cài đặt và ghim vào kệ ChromeOS hoặc ngăn cài đặt.
  • Khởi chạy khi đăng nhập: Cách bạn muốn khởi chạy IWA, cho phép người dùng khởi chạy theo cách thủ công, buộc IWA khởi chạy khi người dùng đăng nhập nhưng cho phép họ đóng IWA hoặc buộc khởi chạy khi người dùng đăng nhập và ngăn họ đóng IWA.

Sau khi bạn lưu, ứng dụng sẽ được cài đặt vào lần tiếp theo bản cập nhật chính sách được áp dụng cho Chromebook trong OU đó. Sau khi cài đặt, thiết bị của người dùng sẽ kiểm tra các bản cập nhật trong Tệp kê khai bản cập nhật ứng dụng web sau mỗi 4 đến 6 giờ.

Ngoài việc bắt buộc cài đặt IWA, bạn cũng có thể tự động cấp một số quyền cho IWA theo cách tương tự như cách bạn có thể làm cho các ứng dụng web khác. Để làm việc này, hãy chuyển đến phần Thiết bị > Chrome > Các chức năng trên web rồi nhấp vào nút Thêm nguồn. Trong Origin / site pattern field, hãy dán Mã nhận dạng gói web của IWA (isolated-app:// sẽ tự động được thêm vào làm giao thức). Từ đó, bạn có thể đặt cấp độ truy cập cho các API khác nhau (được phép/bị chặn/chưa đặt), bao gồm cả API quản lý cửa sổ, quản lý phông chữ cục bộ và API giám sát màn hình. Đối với những API có thể yêu cầu quản trị viên chọn sử dụng thêm để bật, chẳng hạn như API giám sát màn hình bắt buộc, một hộp thoại bổ sung sẽ bật lên để xác nhận lựa chọn của bạn. Sau khi hoàn tất, hãy lưu các thay đổi và người dùng sẽ sẵn sàng bắt đầu sử dụng IWA của bạn!

Làm việc với các tiện ích

Mặc dù các ứng dụng web tách biệt không hoạt động với các tiện ích ngay khi xuất xưởng, nhưng bạn có thể kết nối các tiện ích mà bạn sở hữu với các ứng dụng đó. Để làm như vậy, bạn cần chỉnh sửa tệp kê khai của tiện ích. Phần externally_connectable của tệp kê khai xác định những trang web bên ngoài hoặc Tiện ích Chrome khác mà tiện ích của bạn có thể tương tác. Thêm nguồn gốc của IWA vào trường matches trong externally_connectable (nhớ thêm lược đồ isolated-app://):

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

Mặc dù thao tác này sẽ cho phép tiện ích của bạn chạy trong Ứng dụng web biệt lập, nhưng sẽ không cho phép tiện ích chèn nội dung vào ứng dụng đó; bạn chỉ có thể truyền thông báo giữa tiện ích và IWA.