Thứ Ba, Tháng Ba 21, 2023
27 C
Ho Chi Minh City
spot_img

Token Web là gì – OPENLIVENFT

Must read

Openlivenft
Openlivenfthttps://openlivenft.info/
Trang tổng hợp thông tin nhanh - mới nhất về NFT, COIN, Metaverse, tài chính, crypto của OpenliveNFT

Token-basedauthentication là gì?

Token-basedauthenticationlà phương thức xác thực bằng chuỗi má hóa. Một hệ thống sử dụngToken-based authentication cho phép người dùng nhập user/password để nhận về 1 chuỗi token. Chuỗi Token này được sử dụng để xác minh quyền truy cập vào tài nguyên mà không cần phải cung cấp lại username/password nữa.

Nội dung chính

  • Token-basedauthentication là gì?
  • JWT  JSON Web Token là gì?
  • Cấu trúc của một JWT
  • Flow hệ thống sử dụng JWT
  • Hệ thống Verify chuỗi JWT thế nào?
  • Khi nào sử dụng JWT?
  • RESTful API Services
  • Video liên quan

Tiếp theo, chúng ta sẽ tìm hiểu về phương pháp sử dụng Token-based authentication bằng JWT (Json Web Token).

JWT  JSON Web Token là gì?

JSON Web Token là một chuỗi mã hóa mà nguồn gốc ban đầu là một chuỗi JSON. Chuỗi thông tin dạng JSON bằng phương pháp mã hóa nào đó, nó trở thành 1 chuỗi ký tự lộn xộn nhìn vào sẽ rất khó hiểu. Xem thêm JSON là gì?

Bạn đang đọc: Token Web là gì – OPENLIVENFT

Bạn đang đọc : Token Web là gì
Định nghĩa theo tiêu chuẩn :

JSON Web Token ( JWT ) là 1 tiêu chuẩn mở ( RFC 7519 ) định nghĩa phương pháp truyền tin bảo đảm an toàn giữa những thành viên bằng 1 đối tượng người tiêu dùng JSON. tin tức này hoàn toàn có thể được xác nhận và lưu lại an toàn và đáng tin cậy nhờ vào chữ ký của nó. Phần chữ ký của JWT sẽ được mã hóa lại bằng HMAC hoặc RSA. ( Nguồn : techmaster.vn )

Như vậy, Bảo mật JWT là phuơng pháp xác thực quyền truy cập (Authentication) bằng JSON Web Token.

Cấu trúc của một JWT

Dưới đây là 1 JSON Web TokenToken Web là gì

JWT trên bao gồm 3 phần:

  • Header
  • Payload
  • Signature

Cấu trúc của nó theo format như sau ..
Image Credit Toptal

Header gồm có hai phần chính :

  • typ  Loại token (mặc định là JWT  cho biết đây là một Token JWT)
  • alg Thuật toán đã dùng để mã hóa (HMAC SHA256  HS256 hoặc RSA).{ “alg”: “HS256”, “typ”: “JWT” }

Chuỗi JSON trên sau khi được mã hóa base64url sẽ trở thành như sauString header = ” { \ ” alg \ ” : \ ” HS256 \ “, \ ” typ \ ” : \ ” JWT \ ” } ” ; System. out.println ( Base64. getUrlEncoder ( ). encodeToString ( header. getBytes ( ) ) ) ; Output : eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

Payload

Là nơi chứa các nội dung của thông tin (claim). Thông tin truyền đi có thể là mô tả của 1 thực thể (ví dụ như người dùng) hoặc cũng có thể là các thông tin bổ sung thêm cho phần Header. Chúng được chia làm 3 loại: reserved,publicprivate

  1. Reserved: là những thông tin đã được quy định ở trongIANA JSON Web Token Claims registry. Những thông tin này không có cái nào là bắt buộc cả. Tuy nhiên tùy vào từng ưng dụng bạn implement mà hãy ràng buộc yêu cầu bắt buộc đối với những thông tin cần thiết
  • iss(issuer): tổ chức phát hành token (không bắt buộc)
  • sub(subject): chủ đề của token (không bắt buộc)
  • aud(audience): đối tượng sử dụng token (không bắt buộc)
  • exp(expired time): thời điểm token sẽ hết hạn (không bắt buộc)
  • nbf(not before time): token sẽ chưa hợp lệ trước thời điểm này
  • iat(issued at): thời điểm token được phát hành, tính theo UNIX time
  • jti: JWT ID
  1. Public: Khóa có thể define tùy theo ý muốn của người sử dụng JWT. Tuy nhiên để tránh trùng lặp, khó nên được quy định ở trong IANA JSON Web Token Registry hoặc là 1 URI có chứa không gian tên không bị trùng lặp. Ví dụ:”https://www.topdev.vn/jwt_claims/is_admin”: true
  2. Private: Phần thông tin thêm dùng để truyền qua giữa các client. Ví dụ{ “sub”: “1234567890”, “name”: “Hai Nguyen”, “admin”: true }

Ta có ví dụ cho phần Payload như sau{ “sub”: “nhs3108”, “exp”: 1558065420 }

Đoạn JSON trên sau khi được mã hóa base64url sẽ trở thành như sauString payload = ” { ” sub ” : ” nhs3108 “, ” exp ” : 1558063837 } ” ; System. out.println ( Base64. getUrlEncoder ( ). encodeToString ( payload. getBytes ( ) ) ) ; Output : eyJzdWIiOiJuaHMzMTA4IiwiZXhwIjoxNTU4MDYzODM3fQ
Xem thêm : IDO là gì ?

Signature

Phần chữ ký được tạo bằng cách phối hợp 2 phần Header + Payload, rồi mã hóa nó lại bằng 1 giải thuật encode bất kể ví dụ như HMAC SHA-256
Có thể xem lại công thức sau : ..
Với signature là phần phối hợp giữaheadervàpayloadỞ 2 phần trên, ta đã cóString header = ” { \ ” alg \ ” : \ ” HS256 \ “, \ ” typ \ ” : \ ” JWT \ ” } ” ; String encodedHeader = Base64. getUrlEncoder ( ). encodeToString ( header. getBytes ( ) ) ; String payload = ” { ” sub ” : ” nhs3108 “, ” exp ” : 1558063837 } ” ; String encodedPayload = Base64. getUrlEncoder ( ). encodeToString ( payload. getBytes ( ) ) ; String signature = encodedHeader + “. ” + encodedPayload ; String encodedSignature = HMACSHA256. encode ( signature, scretKey ) ; System. out.println ( encodedSignature ) ; Output449KVmOFWcpsa3OUjnYGm-f1QWhY8N-DerKDfTK0JQm1NcTổng lại 3 phần, có chuỗi JWT như saueyJhbGciOiJIUzI1NiIsxz4InR5cCI6IkpXVCJ9. eyJzdWIi54OiJuaHMzMTA4IiwiZXhwIjoxNTU4MDYzODM3fQ. 449KV mOFWcpOUjnYGm – f1QWh54Y8N-DerKDfTK0JQm1Nc

Flow hệ thống sử dụng JWT

Chúng ta sẽ dùng sở đồ sau để tưởng tượng

Nhìn vào hình ta có thể thấy flow đi như sau:

  1. User thực hiện login bằng cách gửi id/password hay sử dụng các tài khoản mạng xã hội lên phía Authentication Server (Server xác thực)
  2. Authentication Server tiếp nhận các dữ liệu mà User gửi lên để phục vụ cho việc xác thực người dùng. Trong trường hợp thành công, Authentication Server sẽ tạo một JWT và trả về cho người dùng thông qua response.
  3. Người dùng nhận được JWT do Authentication Server vừa mới trả về làm chìa khóa để thực hiện các lệnh tiếp theo đối với Application Server.
  4. Application Server trước khi thực hiện yêu cầu được gọi từ phía User, sẽ verify JWT gửi lên. Nếu OK, tiếp tục thực hiện yêu cầu được gọi.

Hệ thống Verify chuỗi JWT thế nào?

Câu hỏi đặt ra ở đây là mạng lưới mạng lưới hệ thống Verify JWT thế nào :

  • Chuỗi JWT có cấu trúcH.P.SđượcClientgửi lên.Serversẽ làm tương tự như sau
  • Set S1 = S
  • Set S2 =HMAC(SHA256(H.P) vỡi secret key của hệ thống) (Giả sử hệ thống sử dụng encryption algorithms SHA256)
  • So sánh S1 == S2 ?
  • Nếu S1 và S2 khớp nhau, tức là chữ ký hợp lệ, hệ thống mới tiếp decode payload và tục kiểm tra các data trong payload. Ví dụ trường exp (expiration date).

Khi nào sử dụng JWT?

Với JWT, bạn không cần phải giữ session data trên server để xác nhận user. Luồng đi như sau :

  • Người dùng gọi authentication service để gửi username/password
  • Authentication service phản hồi cho người dùng mã JWT, cái này sẽ định nghĩa xem user là ai
  • Người dùng yêu cầu truy cập một dịch vụ được bảo mật bằng việc gửi token lên
  • Lớp bảo mật sẽ check chữ ký trên token và nếu đó là quyền truy cập hợp lệ thì được tiếp tục truy cập

Các sessions sẽ có thời hạn hết hạn và cần phải được xử lý và giải quyết và xử lý kiểu xoá đi những session hết hạn này. JWT toàn vẹn trọn vẹn hoàn toàn có thể chiếm hữu chính expiry date của chính nó kèm với tài liệu user. Cho nên khi tầng Security check authen của JWT, nó trọn vẹn hoàn toàn có thể check expiry time của token và đơn thuần là phủ nhận truy vấn. Nếu không sử dụng session thì bạn mới trọn vẹn hoàn toàn có thể ứng dụng tạo một service thuần RESTful, chính do một service thuần RESTful được định nghĩa là phải stateless. Với dung tích nhỏ, JWT trọn vẹn hoàn toàn có thể được gửi lên với mọi request cũng giống như session cookie. Nhưng ko giống với session cookie, nó ko cần phải trỏ đến bất kỳ tài liệu nào được tàng trữ trên server, bản thân JWT đã có tài liệu .

RESTful API Services

Xem thêm Restful API là gì?

Xem thêm : Good Games Guild là gì ? GGG token là gì ? – OPENLIVENFT
Bài viết có sự khám phá thêm tới những bài viết sau : https://jwt.io/introduction/

Xem thêm việc làm Javascript Developer hot nhất trên TopDev

Video liên quan

Source: https://openlivenft.info
Category : TIN COIN

Đánh giá bài post
- Advertisement -spot_img

More articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

- Advertisement -spot_img

Latest article

Ethereum là gì? | OpenliveNFT