Nội dung bài viết
#

JSON Web Token (JWT) là gì? Lợi ích và ứng dụng của JWT

Nội dung bài viết

    Khi thiết kế một website, ứng dụng hay phần mềm nhà phát triển luôn quan tâm tới yếu tố bảo mật. Gần đây họ thường xuyên sử dụng JSON Web Token (JWT) để hạn chế sự xâm nhập của tác nhân độc hại. Hãy cùng BKHOST tìm hiểu những vấn đề liên quan tới JWT trong bài viết dưới đây.

    JSON Web Token (JWT) là gì?

    JSON Web Token (JWT) la gi

    JSON Web Token (JWT) được biết đến là một tiêu chuẩn mở được dùng để truyền thông tin an toàn giữa Client – Server dưới định dạng JSON. Như vậy có thể thấy tất cả JWT đều là mã thông báo nhưng không phải bất cứ mã thông báo nào cũng là JWT.

    JWT được truyền đi nhanh chóng bởi kích thước của nó rất nhỏ. JWT được gửi qua nhiều con đường chẳng hạn như URL, tham số POST hoặc bên trong tiêu đề HTTP. Mọi thông tin cần thiết về một thực thể đều được chứa trong JWT để không phải lặp đi lặp lại việc truy vấn cơ sở dữ liệu. Ngoài ra khi nhận JWT người nhận cũng không cần liên lạc với server để xác thực mã thông báo.

    Lợi ích của JWT

    So với tiêu chuẩn SAML và SWT thì JWT có nhiều điểm nổi trội hơn. Vì lẽ đó mà nó được nhiều nhà phát triển tin dùng cho các sản phẩm của họ. Dưới đây là những ưu thế của JWT:

    • Nhỏ gọn hơn: JWT có kích thước nhỏ, ngắn nên trở thành một lựa chọn tốt để được truyền qua HTML và HTTP. Hình ảnh minh họa kích thước của JWT và SAML phần nào giúp bạn thấy rõ điều đó.

    Loi ich cua JWT

    • An toàn hơn: JWT có độ bảo mật cao bởi nó sử dụng cặp khóa công khai và riêng tư dưới dạng chứng chỉ X.509 để tạo chữ ký. Ngoài ra với JWT có thể dùng thuật toán HMAC để ký đối xứng. Mặc dù tiêu chuẩn SAML cũng dùng cặp khóa riêng tư – công khai tương tự như JWT nhưng để thực hiện chữ ký số XML không phải là chuyện dễ.
    • Phổ biến hơn: JWT ánh xạ trực tiếp đến các đối tượng nên bộ phân tích cú pháp của nó phổ biến ở hầu hết các ngôn ngữ lập trình. Trong khi đó XML lại không có tính năng đó. Vì thế làm việc với JWT đơn giản, dễ dàng hơn rất nhiều so với SAML.
    • Dễ xử lý hơn: JWT được sử dụng rộng rãi, phổ biến trên Internet vì thế mà có thể xử lý nó dễ dàng kể cả với các thiết bị di động.

    Nên dùng JWT khi nào?

    Người dùng sử dụng JWT trong nhiều trường hợp, ví dụ:

    • Xác thực: Phần lớn người dùng sử dụng JWT để thực hiện việc này. Sau khi đã đăng nhập thành công vào hệ thống thì ID Tokens được trả lại và theo OIDC thì ID Tokens chính là JWT.
    • Ủy quyền: Sau khi người dùng đã hoàn thành việc đăng nhập, ứng dụng thay mặt cho người dùng để đưa ra các yêu cầu truy cập tuyến đường, tài nguyên, dịch vụ…Muốn thực hiện được việc đó nó cần phải chuyển một Access Token có thể ở dạng JWT.
    • Trao đổi thông tin: Để trao đổi thông tin an toàn giữa các bên thì rất cần đến JWT. Phần signature (chữ ký) ở JWT cho phép bạn xác minh người gửi là thật hay giả mạo. Bên cạnh đó cấu trúc JWT cũng giúp bạn biết nội dung đó có chính xác không.
    • Bảo vệ: Mọi thông tin mà JSON chứa đựng có độ tin cậy cao bởi nó được ký điện tử. Mặc dù để giữ bí mật cho các bên JWT cũng có thể được mã hóa tuy nhiên JWT do Auth0 cấp thì chúng được ký hoàn toàn chứ không mã hóa. Tóm lại JWT có tính bảo mật cao nhờ ký bằng cặp khóa công khai – riêng tư hoặc ký bằng cách sử dụng bí mật với thuật toán HMAC.

    Cấu trúc mã thông báo web JSON

    Chữ ký trên web JSON (JWS) xuất hiện là bởi mọi JWT do Auth0 cấp đều được ký chữ không phải mã hóa. JWS sử dụng cấu trúc dữ liệu dựa trên JSOn để đại diện cho một nội dung nào đó được bảo mật bằng MAC hoặc chữ ký số. Cấu trúc của JSON Web Token được định dạng tốt sẽ gồm ba phần và mỗi phần ngăn cách nhau bởi dấu chấm (.):

    • JOSE Header: phần này chứa kiểu dữ liệu về loại mã thông báo và các thuật toán nhằm mục đích mã hóa chuỗi JWT.
    • JWS payload: chứa những thông tin được dùng để xác minh ví dụ như danh tính, các quyền hạn…
    • JWS signature: phần chữ ký được dùng để xác thực mã thông báo là đúng, chính xác chứ không phải giả mạo.

    JWT sẽ có hình thức như:

    Cau truc JWT

    Nếu bạn muốn xem bên trong của JWT hãy dùng JWT.io (trình gỡ rối). Với JWT.io bạn có thể biết được JWT hình thành tốt không chỉ sau một vài thao tác đơn giản. Mặt khác nó cũng cho phép bạn kiểm tra thủ công các giá trị của những yêu cầu khác.

    Su dung jwt.io check JWT

    JOSE header

    Các tham số mô tả các hoạt động mật mã và các tham số được sử dụng đều được chứa ở đối tượng JSON. JOSE header sẽ là tập hợp các Header Parameters gồm một cặp name/value: thuật toán băm (chẳng hạn như HMAC SHA256, RSA) và type JWT.

    {"alg": "HS256","typ": "JWT"}

    JWS payload

    JWS payload chưa những thông tin về một thực thể mà phần lớn là người dùng cùng với các yếu tố để xác nhận danh tính, quyền sở hữu. Ở ví dụ sau thực thể chúng tôi hướng đến là một người dùng. Một điều cần lưu ý là bạn phải biết các loại xác nhận quyền sở hữu và cách thức đặt tên của chúng để không gặp rắc rối khi thực hiện xác nhận quyền sở hữu JWT.

    {"sub": "1234567890","name": "John Doe","admin": true}

    JWS signature

    JWS signature (chữ ký JWS) để người nhận xác minh được danh tính của người gửi JWT và đảm bảo nội dung của thư không bị xáo trộn, thay đổi. Để tạo chữ ký bắt buộc header được mã hóa Base64, payload được thực hiện cùng với một chuỗi secret. Ví dụ bạn dùng thuật toán HMAC SHA256 để tạo chữ ký cho mã thông báo, bạn thực hiện như sau:

    HMACSHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload),secret)secret)

    Tổng kết về JWT

    Qua một vài thông tin về JSON Web Token (JWT) mà chúng tôi cung cấp ở trên hy vọng đã giúp bạn phần nào hiểu được JWT là gì và những lợi ích mà nó mang lại. Nếu bạn muốn trang web, ứng dụng của mình gia tăng độ bảo mật hãy mạnh dạn thử JWT xem sao.

    Nếu còn gặp bất cứ vướng mắc gì về JSON Web Token (JWT), hãy để lại ở bên bình luận bên dưới, BKHOST sẽ trả lời bạn trong thời gian sớm nhất.

    P/s: Bạn cũng có thể truy cập vào Blog của BKHOST để đọc thêm các bài viết chia sẻ kiến thức về lập trình, quản trị mạng, website, domain, hosting, vps, server, email,… Chúc bạn thành công.


    • json web token là gì
    • jwt authentication
    • jwt token là gì
    • jwt là gì

    Thuê Cloud Server tại BKHOST

    Giảm giá cực sâu, chất lượng hàng đầu. Đăng ký ngay hôm nay:

    thuê máy chủ đám mây

    Tôi là Trịnh Duy Thanh, CEO & Founder Công ty Cổ Phần Giải Pháp Mạng Trực Tuyến Việt Nam - BKHOST. Với sứ mệnh mang tới các dịch vụ trên Internet tốt nhất cho các cá nhân và doanh nghiệp trong nước và quốc tế, tôi luôn nỗ lực hết mình nâng cấp đầu tư hệ thống phần cứng, nâng cao chất lượng dịch vụ chăm sóc khách hàng để đem đến những sản phẩm hoàn hảo nhất cho người tiêu dùng. Vì vậy, tôi tin tưởng sẽ đem đến các giải pháp CNTT mới nhất, tối ưu nhất, hiệu quả nhất và chi phí hợp lý nhất cho tất cả các doanh nghiệp.
    Bình luận

    Trượt lên đầu trang
    Gọi ĐT tư vấn ngay
    Chat ngay qua Zalo
    Chat ngay qua Messenger
    Bạn đã hài lòng với trải nghiệm trên Bkhost.vn?
    Cảm ơn lượt bình chọn của bạn, Chúc bạn 1 ngày tốt lành !