2.4.1. Giới thiệu
JSON Web Token (JWT) là một chuẩn mở (RFC 7519) định nghĩa một cách nhỏ gọn và khép kín để truyền một cách an tồn thơng tin giữa các bên dưới dạng đối tượng JSON. Thơng tin này có thể được xác minh và đáng tin cậy vì nó có chứa chữ ký số. JWTs có thể được ký bằng một thuật tốn bí mật (với thuật toán HMAC) hoặc một public / private key sử dụng mã hoá RSA.
Cấu trúc của một JWT như sau:
<base64-encoded header>.<base64-encoded payload>.<base64-encoded signature>
Nói một cách khác, JWT là sự kết hợp (bởi dấu .) một Object Header dưới định dạng JSON được encode base64, một payload object dưới định dạng JSON được encode base64 và một Signature cho URI cũng được mã hóa base64 nốt.
2.4.2. Các thành phần
❖ Header
Header bao gồm hai phần chính: loại token (mặc định là JWT - Thông tin này cho biết đây là một Token JWT) và thuật tốn đã dùng để mã hóa (HMAC SHA256 - HS256 hoặc RSA).
❖ Payload
Payload chứa các claims. Claims là một các biểu thức về một thực thể (chẳng hạn user) và một số metadata phụ trợ. Có 3 loại claims thường gặp trong Payload: reserved, public và private claims.
- Reserved claims: Đây là một số metadata được định nghĩa trước, trong đó một số metadata là bắt buộc, số còn lại nên tuân theo để JWT hợp lệ và đầy đủ thông tin: iss (issuer), iat (issued-at time) exp (expiration time), sub (subject), aud (audience), jti (Unique Identifier cho JWT) ...
- Public Claims: Claims được cộng đồng công nhận và sử dụng rộng rãi.
- Private Claims: Claims tự định nghĩa (không được trùng với Reserved Claims và Public Claims), được tạo ra để chia sẻ thông tin giữa 2 parties đã thỏa thuận và thống nhất trước đó.
17
❖ Signature
Signature trong JWT là một chuỗi được mã hóa bởi header, payload cùng với một chuỗi bí mật theo nguyên tắc sau:
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
Do bản thân Signature đã bao gồm cả header và payload nên Signature có thể dùng để kiểm tra tính tồn vẹn của dữ liệu khi truyền tải.
2.4.3. Trường hợp sử dụng
Một trong những tình huống ứng dụng JWT thường gặp, đó là:
Authentication: Tình huống thường gặp nhất, khi user logged in, mỗi request tiếp đó đều kèm theo chuỗi token JWT, cho phép người dùng có thể truy cập đường dẫn, dịch vụ và tài nguyên được phép ứng với token đó. Single Sign On cũng là một chức năng có sử dụng JWT một cách rộng rãi, bởi vì chuỗi JWT có kích thước đủ nhỏ để đính kèm trong request và sử dụng ở nhiều hệ thống thuộc các domain khác nhau.
Information Exchange: JSON Web Token cũng là một cách hữu hiệu và bảo mật để trao đổi thông tin giữa nhiều ứng dụng, bởi vì JWT phải được ký (bằng cặp public / private key), bạn có thể chắc rằng người gửi chính là người mà họ nói rằng họ là (nói tóm tắt hơn là khơng hoặc khó để mạo danh bằng JWT), ngồi ra, chữ ký cũng được tính tốn dựa trên nội dung của header và nội dung payload, nhờ đó, bạn có thể xác thực được nội dung là nguyên bản, chưa được chỉnh sửa hoặc can thiệp. Tuy nhiên, một lưu ý hết sức quan trọng là do cấu trúc của JWT đơn giản nên JWT có thể dễ dàng bị decode, do vậy, chúng ta không nên dùng JWT để truyền các thông tin nhạy cảm.
2.5. Tổng quan về Firebase 2.5.1. Giới thiệu
Ở mỗi góc độ quan điểm người dùng, Firebase được định nghĩa theo các cách khác nhau. Đây là hai khái niệm cơ bản và tổng quan nhất về Firebase.
▪ Một là, Firebase là một nền tảng để phát triển ứng dụng di động và trang web. Nền tảng này bao gồm các API đơn giản, không cần backend hay server.
▪ Hai là, Firebase là một dịch vụ hệ thống backend được Google cung cấp sẵn cho ứng dụng. Dịch vụ này giúp bạn phát triển, triển khai và mở rộng quy mô của ứng
18
dụng Mobile nhanh hơn. Dù bạn sử dụng Android hay IOS, Firebase vẫn có thể hỗ trợ tốt.
Hình 2.5 - Firebase
Dù hiểu theo quan điểm nào, bản chất của Firebase vẫn là giúp các nhà lập trình (developer) tiết kiệm thời gian, đơn giản hóa các thao tác với cơ sở dữ liệu.
2.5.2. Lịch sử phát triển
Năm 2011, Firebase ra đời với tên gọi là Envolve bởi James Tamplin và Andrew Lee. Mục đích Envolve cung cấp cho developer API là để tích hợp chức năng trò chuyện trực tuyến vào trang web. Tuy nhiên, khơng chỉ đơn thuần trị chuyện, người dùng đã mở rộng khả năng sử dụng của Envolve. Developer đã tận dụng Envolve để truyền dữ liệu ứng dụng như như game online, danh bạ, lịch…
Vì thế, hai người sáng lập Envolve tách hệ thống nhắn tin trực tuyến và đồng bộ dữ liệu thời gian thực thành hai phần riêng biệt. Tháng 4 năm 2012, Firebase được tạo ra dưới dạng công ty riêng biệt Backend-as-a-Service với chức năng Realtime.
Năm 2014, Google mua lại Firebase. Sau đó, Firebase nhanh chóng phát triển thành ứng dụng đa năng của nền tảng di động và web hiện nay.
19
2.5.3. Những dịch vụ nổi bật
Firebase cung cấp cho chúng ta cơng cụ Firebase Analytics và 2 nhóm sản phẩm chính tập trung vào 2 đối tượng bên dưới.
❖ Develop & test your app
Để phát triển và kiểm thử các ứng dụng, Firebase đã tạo ra các công cụ:
▪ Realtime Database: hỗ trợ đồng bộ hóa dữ liệu của người dùng kể cả khi khơng
có kết nối mạng. , tạo nên trải nghiệm xuyên suốt bất chấp tình trạng kết nối internet của người sử dụng. Dù Android, IOS, web, c++, unity, và cả xamarin, Reatime Database của Firebase vẫn hỗ trợ tốt.
▪ Crashlytics: Hệ thống theo dõi và lưu trữ thông tin lỗi của ứng dụng đang chạy
trên máy người dùng. Nhờ Crashlytics, developer có thể nắm bắt và xử lý kịp thời các lỗi chính của ứng dụng.
▪ Cloud Firestore: Lưu trữ và đồng bộ dữ liệu giữa người dùng và thiết bị sử dụng
cơ sở dữ liệu noSQL được lưu trữ trên hạ tầng Cloud.
▪ Authentication: bảo mật và đơn giản hóa q trình quản lý người dùng. Firebase
Auth cung cấp nhiều phương pháp để xác thực. Bao gồm email và mật khẩu, các nhà cung cấp bên thứ ba và sử dụng trực tiếp hệ thống tài khoản hiện tại của bạn. ▪ Test Lab: hỗ trợ chạy thử nghiệm tự động và tùy chỉnh cho ứng dụng của bạn
trên cả các thiết bị ảo lẫn vật lý do Google cung cấp.
▪ Các công cụ khác như: Performance Monitoring, Cloud Storage, Cloud
Functions, …
❖ Grow & engage your audience
Để hỗ trợ phân tích dữ liệu và tối ưu hóa trải nghiệm đối với người dùng, Firebase đã thiết kế sản phẩm Firebase Analytics.
Đây là một giải pháp miễn phí và phân tích khơng giới hạn. Bạn có thể quản lý hành vi người dùng và các biện pháp từ một bảng điều khiển duy nhất. Bảng đơn này sẽ giúp bạn phân tích thuộc tính và hành vi của người dùng. Từ đó, đưa ra các quyết định sáng suốt về lộ trình sản phẩm của bạn.
20
Hình 2.6 - Các dịch vụ của Firebase
2.5.4. Ưu nhược điểm
❖ Ưu điểm
- Triển khai ứng dụng nhanh chóng: Firebase tiết kiệm rất nhiều thời gian quản lý và đồng bộ tất cả dữ liệu cho người dùng. Đó là nhờ người dùng không phải áp lực, quan tâm đến phần backed cùng các API tốt, hỗ trợ đa nền tảng.
- Bảo mật: Bạn có thể hồn tồn yên tâm về độ bảo mật của Firebase nhờ nền tảng cloud, kết nối thông qua SSL, dùng JavaScript phần quyền người dùng cơ sở dữ liệu, - Sự ổn định: Được viết dựa trên nền tảng cloud cung cấp bởi Google, các công cụ
luôn đảm bảo độ ổn định tối đa. Bên cạnh đó, q trình nâng cấp hay bảo trì Server cũng diễn ra nhanh và đơn giản hơn.
❖ Nhược điểm
Cơ sở dữ liệu của Firebase được tổ chức theo kiểu trees, parent-children. Trong khi đó, người dùng SQL lại quen thuộc với kiểu Table truyền thống. Khi sử dụng Firebase, có lẽ, người dùng sẽ mất thời gian để làm quen trước khi sử dụng thành thạo.
21
CHƯƠNG 3 - PHÂN TÍCH THIẾT KẾ HỆ THỐNG