Tìm Hiểu Jwt(Json Web Token) Authentication

--- Bài mới hơn ---

  • Tìm Hiểu Về Json Web Token (Jwt)
  • Tìm Hiểu Về Jquery Part 1
  • Java Là Gì? Giới Thiệu Ngôn Ngữ Java
  • Java Là Gì? Tìm Hiểu Đặc Điểm Và Ứng Dụng Của Java
  • Tìm Hiểu Jack Balun Ứng Dụng Trong Lắp Đặt Camera Quan Sát
  • Mở đầu.

    JWT(JSON Web Token) là công nghệ phổ biến ngày nay, nhưng cũng đồng thời cũng gây tranh cãi rất nhiều.

    Có nhiều người nói đừng bao giờ dùng nó, trong khi những người khác lại nói nó thật tuyệt vời. Vậy sự thật là gì? Nên hay không nên dùng? Đó là lý do chúng ta ở đây.

    1. Giới thiệu ngắn gọn về JWT.

    JWT về mặt kỹ thuật là một cơ chế để xác minh chính chủ một số dữ liệu JSON. Nó là một chuỗi biến đổi, có thể chứa một lượng dữ liệu không giới hạn (không giống như một cookie) và nó đã được mã hóa bằng chữ ký.

    Khi một máy chủ nhận được JWT, nó có thể đảm bảo dữ liệu mà nó chứa có thể được tin cậy bởi vì nó đã được xác thực với chữ ký đã được lưu trữ. Không yếu tố trung gian nào có thể sửa đổi JWT sau khi nó được gửi.

    Điều quan trọng cần lưu ý là JWT đảm bảo quyền sở hữu dữ liệu nhưng không mã hóa; bất kỳ ai cũng có thể xem dữ liệu JSON chúng ta lưu trữ trong JWT một khi họ có được JWT đấy, vì nó chỉ được tuần tự hóa, không được mã hóa. Vì lý do này, nên sử dụng JWT với HTTPS.

    2. Vậy nó tốt trong trường hợp nào?

    JWT là một công nghệ tuyệt vời để xác thực API và ủy quyền từ máy chủ đến máy chủ.

    Nó không phải là một lựa chọn tốt cho các session.

    3. Sử dụng JWT để xác thực API

    Ứng dụng nhiều nhất của JWT Token, và mục đích duy nhất bạn nên sử dụng JWT là dùng nó như một cơ chế xác thực API.

    Điều này hiện nay là quá phổ biến và được sử dụng rộng rãi, kể cả Google cũng sử dụng JWT để xác thực các APIs của họ.

    Ý tưởng rất đơn giản:

    • Bạn sẽ nhận được secret token từ service khi bạn thiết lập API
    • Ở phía client, bạn sẽ sử dụng secret token để kí tên và gắn nó vào token (hiện nay có rất nhiều thư viện hỗ trợ việc này)
    • Bạn sẽ gắn nó như một phần của API request và server sẽ biết nó là ai dựa trên request được ký với 1 unique identifier duy nhất:

    4. Vô hiệu hoá 1 single token

    Làm thế nào bạn có thể làm mất hiệu lực môt single token? Một cách đơn giản là thay đổi secret key của server, làm mất hiệu lực tất cả các token. Nhưng làm vậy sẽ khiến khách hàng choáng váng, không hiểu vì sao mà token của họ “toang” như vậy.

    Một cách khác để xử lý vấn đề này là thêm yếu tố thời gian vào đối tượng người dùng. Mã token tự động lưu trữ giá trị created at trong thuộc tính iat. Mỗi lần bạn kiểm tra token, bạn chỉ cần so sánh giá trị created at với giá trị thời gian ở đối tượng user.

    Để vô hiệu hóa token, chỉ cần cập nhật giá trị phía máy chủ và nếu iat cũ hơn, bạn có thể reject token.

    5. Lưu trữ JWTs an toàn

    JWT cần được lưu trữ ở nơi an toàn bên trong trình duyệt của người dùng.

    Nếu bạn lưu trữ nó bên trong localStorage, nó có thể truy cập bằng bất kỳ script nào trong trang của bạn (điều này thực sự tệ, vì một cuộc tấn công XSS có thể cho phép kẻ tấn công bên ngoài lấy được token).

    Đừng lưu token trong localStorage (hoặc sessionStorage). Nếu bất kỳ mã script bên thứ ba nào bạn đưa vào trang của mình bị xâm phạm, nó có thể truy cập tất cả các token của người dùng. JWT cần được lưu trữ bên trong httpOnly cookie, một loại cookie đặc biệt mà chỉ có thể gửi trong các yêu cầu HTTP đến server và nó không bao giờ có thể truy cập (cả để đọc hoặc viết) từ JavaScript chạy trên trình duyệt.

    6. Sử dụng JWT để trao đổi thông tin an toàn giữa hai máy chủ

    Vì JWT đã được ký, người nhận có thể chắc chắn rằng khách hàng thực sự là người mà họ nghĩ.

    6.1. Sử dụng JWT cho xác thực SPA

    JWTs có thể được sử dụng như một cơ chế xác thực không cần đến cơ sở dữ liệu. Server có thể tránh sử dụng cơ sở dữ liệu vì dữ liệu lưu trữ trong JWT được gửi cho khách hàng là an toàn.

    6.2. Sử dụng JWT để uỷ quyền hoạt động trên các máy chủ

    Giả sử bạn đăng nhập vào 1 máy chủ, SERVER1, sau khi đăng nhập thành công thì được chuyển hướng đến một máy chủ khác SERVER2 để thực hiện một số xử lý.

    SERVER1 có thể cấp cho bạn 1 JWT để ủy quyền cho phép bạn kết nối đến SERVER2. Hai máy chủ không cần chia sẻ cùng 1 session hoặc bất cứ điều gì để xác thực bạn. Sử dụng token để xử lý trường hợp này là rất hoàn hảo.

    7. Session tokens cho các regular web apps

    Bạn có thể nghĩ rằng việc sử dụng JWTs cho session token là một ý tưởng hay lúc đầu, chẳng hạn:

    Bạn có thể lưu trữ bất kỳ loại thông tin user nào trên client Server có thể tin tưởng client vì JWT đã được ký và không cần phải gọi cơ sở dữ liệu để lấy thông tin bạn đã lưu trữ trong JWT Bạn không cần phải kết hợp các sessions trong cơ sở dữ liệu tập trung khi bạn gặp vấn đề cần horizontal scaling Cuối cùng, nếu bạn đã có cơ sở dữ liệu cho ứng dụng của mình, chỉ cần sử dụng bảng session và sử dụng các regular session được hỗ trợ bởi các framework server side là đủ.

    Tại sao? Sẽ mất nhiều công sức nếu sử dụng JWT: vì chúng được gửi trong mọi request đến máy chủ và nó luôn luôn mất công sức hơn là sử dụng server-side sessions.

    8. Cách chọn thư viện JWT hoàn hảo

    Hãy vào trang chúng tôi và xem danh sách thư viện. Nó có danh sách các thư viện phổ biến nhất để triển khai JWT.

    Chọn ngôn ngữ bạn dùng và chọn thư viện mà bạn thích, thư viện tốt nhất là thư viện có số lượng tích xanh nhiều nhất.

    9. Kết luận

    JWT là một tiêu chuẩn rất phổ biến mà bạn có thể sử dụng để xác thực requests bằng cách sử dụng chữ ký và trao đổi thông tin giữa các bên. Hãy chắc chắn rằng bạn lúc nào thì sử dụng nó, lúc nào thì không và cách ngăn chặn các vấn đề bảo mật cơ bản nhất.

    Nguồn: https://blog.logrocket.com/jwt-authentication-best-practices/

    --- Bài cũ hơn ---

  • Tìm Hiểu Về Các Tính Năng Cơ Bản Của Jmeter
  • Insight Là Gì? Các Bước Xác Định Insight Của Khách Hàng
  • Tất Tần Tật Về Iphone 12: Phiên Bản, Giá Bán, Ngày Ra Mắt Và Tính Năng
  • Tìm Hiểu Về Iphone 8 Plus Chống Nước Có Được Hay Không?
  • Những Gì Bạn Hiểu Về Iphone 8 Plus Là Chưa Đủ !!!!!
  • Tìm Hiểu Về Json Web Token (Jwt)

    --- Bài mới hơn ---

  • Tìm Hiểu Về Jquery Part 1
  • Java Là Gì? Giới Thiệu Ngôn Ngữ Java
  • Java Là Gì? Tìm Hiểu Đặc Điểm Và Ứng Dụng Của Java
  • Tìm Hiểu Jack Balun Ứng Dụng Trong Lắp Đặt Camera Quan Sát
  • Tìm Hiểu Jack Balun Là Gì Ứng Dụng Trong Lắp Đặt Camera 2022
  • JSON Web Mã (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 toà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 toán bí mật (với thuật toán HMAC) hoặc một public / private key sử dụng mã hoá RSA.

    Một ví dụ về JWT Token:

    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjEzODY4OTkxMzEsImlzcyI6ImppcmE6MTU0ODk1OTUiLCJxc2giOiI4MDYzZmY0Y2ExZTQxZGY3YmM5MGM4YWI2ZDBmNjIwN2Q0OTFjZjZkYWQ3YzY2ZWE3OTdiNDYxNGI3MTkyMmU5IiwiaWF0IjoxMzg2ODk4OTUxfQ.uKqU9dTB6gKwG6jQCuXYAiMNdfNRw98Hw_IWuA5MaMo

    Thoạt trông phức tạp là thế nhưng nếu hiểu, cấu trúc của một JWT chỉ đơn giản như sau:

    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.

    Giải thích thêm về 3 thành phần của JWT

    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 toá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, Can be used to pvent the JWT from being replayed. This is helpful for a one time use token.) … Ví dụ:

    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 đó.

    Signature

    Chữ ký 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 toàn vẹn của dữ liệu khi truyền tải.

    When should you use JSON Web Tokens?

    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), ngoài ra, chữ ký cũng được tính toá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, bạn không nên dùng JWT để transfer các thông tin nhạy cảm.

    How do JSON Web Tokens work?

    Ở đây, mình ví dụ cụ thể ứng dụng của JWT trong bài toán Authenticate (xác thực) – Trong việc xác thực, khi user đăng nhập thành công (Browser sẽ post username và mật khẩu về Server), Server sẽ trả về một chuỗi JWT về Browser, và Token JWT này cần được lưu lại trong Browser của người dùng (thường là LocalStorage hoặc Cookies), thay vì cách truyền thống là tạo một session trên Server và trả về Cookie.

    Bất cứ khi nào mà User muốn truy cập vào Route được bảo vệ (mà chỉ có User đã đăng nhập mới được phép), Browser sẽ gửi token JWT này trong Header Authorization, Bearer schema của request gửi đi.

    Đây là cách mà stateless (phi trạng thái) authentication làm việc, trạng thái của user không được lưu trong bộ nhớ của Server mà được đóng gói hẳn vào trong JWT. Server sẽ kiểm tra Token JWT này có hợp lệ hay không (Bởi vì JWT có tính chất self-contained, mọi thông tin cần thiết để kiểm tra JWT đều đã được chứa trong Token JWT).

    Do tính chất stateless nên chúng ta không còn phải lo lắng về domains nào được sử dụng cho API của bạn, như không còn gặp rắc rối với CORS (Cross-Origin Resource Sharing) vì nó không sử dụng cookies.

    JWT Introduction

    All Rights Reserved

    --- Bài cũ hơn ---

  • Tìm Hiểu Jwt(Json Web Token) Authentication
  • Tìm Hiểu Về Các Tính Năng Cơ Bản Của Jmeter
  • Insight Là Gì? Các Bước Xác Định Insight Của Khách Hàng
  • Tất Tần Tật Về Iphone 12: Phiên Bản, Giá Bán, Ngày Ra Mắt Và Tính Năng
  • Tìm Hiểu Về Iphone 8 Plus Chống Nước Có Được Hay Không?
  • Json Web Token (Jwt) Là Gì ?

    --- Bài mới hơn ---

  • Tìm Hiểu Regular Expression Từ Con Số 0
  • Tại Sao Developer Cần Biết Regular Expression?
  • Zalopay Là Gì? Tìm Hiểu Chiến Lược Marketing Của Zalopay
  • Zalopay Là Gì? Ví Zalopay Dùng Để Làm Gì? Tìm Hiểu Về Zalopay
  • Zalopay: Ứng Dụng Thanh Toán Mọi Tiền Bạc Một Cách Nhanh Chóng
  • Jwt là gì?

    JWT là một phương tiện đại diện cho các yêu cầu chuyển giao giữa hai bên Client – Server , các thông tin trong chuỗi JWT được định dạng bằng JSON . Trong đó chuỗi Token phải có 3 phần là header , phần payload và phần signature được ngăn bằng dấu “.”

    Vậy theo lý thuyết trên thì mình sẽ có một chuỗi Token như sau:

    header . payload . signature

    Như ở trên đã nói JSON Web Token bao gồm 3 phần, được ngăn cách nhau bởi dấu chấm (.):

    1. Header
    2. Payload
    3. Signature (chữ ký)

    Phần header sẽ chứa kiểu dữ liệu , và thuật toán sử dụng để mã hóa ra chuỗi JWT

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

    • “typ” (type) chỉ ra rằng đối tượng là một JWT
    • “alg” (algorithm) xác định thuật toán mã hóa cho chuỗi là HS256

    Payload

    Phần payload sẽ chứa các thông tin mình muốn đặt trong chuỗi Token như username , userId , author , … ví dụ:

    { "user_name" : "admin" , "user_id" : "1513717410" , "authorities" : "ADMIN_USER" , "jti" : "474cb37f-2c9c-44e4-8f5c-1ea5e4cc4d18" }

    Signature

    Phần chử ký này sẽ được tạo ra bằng cách mã hóa phần header , payload kèm theo một chuỗi secret (khóa bí mật) , ví dụ:

    data = base64urlEncode ( header ) + "." + base64urlEncode ( payload ) signature = Hash ( data , secret );

      base64UrlEncoder : thuật toán mã hóa headerpayload

    Đoạn code trên sau khi mã hóa headerpayload bằng thuật toán base64UrlEncode ta sẽ có chuỗi như sau

    // header eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 // payload eyJhdWQiOlsidGVzdGp3dHJlc291cmNlaWQiXSwidXNlcl9uYW1lIjoiYWRtaW4iLCJzY29wZSI6WyJyZWFkIiwid3JpdGUiXSwiZXhwIjoxNTEzNzE

    Sau đó mã hóa 2 chuỗi trên kèm theo secret (khóa bí mật) bằng thuật toán HS256 ta sẽ có chuỗi signature như sau:

    9nRhBWiRoryc8fV5xRpTmw9iyJ6EM7WTGTjvCM1e36Q

    Cuối cùng

    Kết hợp 3 chuỗi trên lại ta sẽ có được một chuỗi JWT hoàn chỉnh

    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 . eyJhdWQiOlsidGVzdGp3dHJlc291cmNlaWQiXSwidXNlcl9uYW1lIjoiYWRtaW4iLCJzY29wZSI6WyJyZWFkIiwid3JpdGUiXSwiZXhwIjoxNTEzNzE . 9nRhBWiRoryc8fV5xRpTmw9iyJ6EM7WTGTjvCM1e36Q

    Như vậy các bạn cũng đã hiểu được các thành phần của một chuỗi JWT.

    Authentication: Đây là trường hợp phổ biến nhất thường sử dụng JWT. Khi người dùng đã đăng nhập vào hệ thống thì những request tiếp theo từ phía người dùng sẽ chứa thêm mã JWT. Điều này cho phép người dùng được cấp quyền truy cập vào các url, service, và resource mà mã Token đó cho phép. Phương pháp này không bị ảnh hưởng bởi Cross-Origin Resource Sharing (CORS) do nó không sử dụng cookie.

    Trao đổi thông tin: JSON Web Token là 1 cách thức khá hay để truyền thông tin an toàn giữa các thành viên với nhau, nhờ vào phần signature của nó. Phía người nhận có thể biết được người gửi là ai thông qua phần signature. Và chữ ký được tạo ra bằng việc kết hợp cả phần header, payload lại nên thông qua đó ta có thể xác nhận được chữ ký có bị giả mạo hay không.

    --- Bài cũ hơn ---

  • Cách Tạo Số Của Hộp Số Tự Động Trên Xe Ô Tô
  • Tìm Hiểu Hộp Số Tự Động
  • Hộp Số Tự Động Xe Ô Tô Hoạt Động Như Thế Nào Và Nguyên Lý Của Nó Là Gì?
  • Tìm Hiểu Các Loại Hộp Số Tự Động Trên Ô Tô
  • Cấu Tạo & Nguyên Lý Hoạt Động Của Hộp Số Tự Động Ô Tô
  • Jwt Là Gì ? Khi Nào Nên Dùng Jwt Thì Hợp Lý Và Tối Ưu

    --- Bài mới hơn ---

  • So Sánh Json Web Token(Jwt) Và Session Cookies Trong Việc Authentication
  • Hướng Dẫn Jquery Ajax Toàn Tập
  • Bạn Đã Biết Sử Dụng Ajax Với Jquery Chưa?
  • Tìm Hiểu Về Jquery Mobile (P.2)
  • Tìm Hiểu Về Java Platform Independent
  • JWT là gì ? Giải nghĩa từ viết tắt JWT được hiểu như thế nào ? Khám phá từ viết tắt JWT được sử dụng phù hợp nhất vào thời điểm nào là tối ưu.

    Trong thời gian vừa qua bạn đang phải loay hoay và tìm hiểu với 1 framework mới. Sau khi tìm hiểu và mày mò tài liệu hướng dẫn họ có nói đến một phương pháp xác thực quyền truy cập bằng JWT. Vậy thực chất JWT là gì và chúng được hiểu như thế nào? Ngay bài viết này sẽ giúp bạn giải đáp vấn đề chi tiết nhất và có một cái nhìn trực quan nhất về JWT.

    Nghĩa JWT là gì ?

    JWT là một cụm từ được viết tắt trong tiếng anh, với tên đầy đủ của nó là JSON Web Token. Đặc biệt hơn nữa thông tin này được xác định và đánh dấu bằng “chữ ký” của nó.

    Chúng có kích thước nhỏ và giúp cho việc truyền tải nhanh hơn, cải thiện rõ ràng. Cách thức truyền tải của chúng hoàn toàn khép kín ở phần payload được hiểu là một khối hàng.

    JSON Web Token có chứa toàn bộ những thông tin cần thiết mà chúng ta đang quan tâm và tìm hiểu. Để có thể hiểu cụ thể hơn bạn có thể xem qua ví dụ. Chúng ta sẽ không phải truy vấn cơ sở dữ liệu thông tin của người dùng như trước đây.

    JWT được sử dụng khi nào thì phù hợp nhất?

    Chúng ta thường dùng chúng ở trong 2 trường hợp chủ yếu và phổ biến nhất đó là xác thực và trao đổi thông tin. Đối với việc xác thực là vấn đề được diễn ra phổ biến nhất khi sử dụng JWT.

    Khi người dùng đã đăng nhập vào hệ thống thì những yêu cầu tiếp theo sẽ được người dùng chứa thêm những mã JWT. Điều này sẽ cho phép người dùng có thể truy cập vào các đường link một cách dễ dàng. Chắc chắn phương pháp sẽ không bị ảnh hưởng bởi CORS có nghĩa là Cross-Origin Resource Sharing vì nó không sử dụng cookie.

    Một trong những trường hợp tiếp theo mà bắt buộc chúng ta phải sử dụng JWT đó là giúp quá trình trao đổi thông tin được diễn ra dễ dàng hơn. Đây là một cách thức truyền tải thông tin một cách an toàn tuyệt đối.

    Nó có thể giúp bạn trao đổi những vấn đề khác nhau giữa các thành viên của chúng nhờ vào phần “chữ ký” sẵn có của nó. Người nhận có thể nhận biết được người gửi là ai thông qua phần chữ ký. Bên cạnh đó, phần chữ ký được tạo ra từ việc kết hợp cả phần header, payload, do đó chúng ta có thể xác nhận được chữ ký có giả mạo hay không.

    Giải Đáp Câu Hỏi –

    --- Bài cũ hơn ---

  • Authentication Dùng Passport Và Jwt Trong Express Node Js
  • Tự Học Kiểm Thử Tự Động Với Jmeter
  • Tìm Hiểu Tổng Quan Về Apache Jmeter
  • Javascript Là Gì? Cơ Bản Về Ngôn Ngữ Lập Trình Của Tương Lai
  • Javascript Là Gì? Giới Thiệu Ngôn Ngữ Js Cho Người Mới Học
  • Mã Thông Báo Web Json – Json Web Token (Jwt)

    --- Bài mới hơn ---

  • Ajax Là Gì? Cách Thức Hoạt Động Và Lợi Ích Mà Nó Mang Lại
  • Jquery Ajax Là Gì Và Cách Sử Dụng Ajax Tối Ưu
  • Jquery Plugin Quản Lý Table Tuyệt Hảo
  • Tìm Kiếm Trên Dữ Liệu Cột Trên Datatable Sử Dụng Ajax Jquery
  • 5 Bước Cơ Bản Để Tạo Một Datatable Plugin Cho Jquery
  • Bài viết dựa trên tài liệu theo dõi tiêu chuẩn mở Internet. Đây là sản phẩm của nhóm chuyên viên kỹ thuật Internet (IETF) và hoành thành vào tháng 05 năm 2022. Những tác giả chính của tiêu chuẩn là M. Jones làm việc tại Microsoft, J. Bradley đến từ Ping indentity và N. Sakirumra đến từ NRI. Nó là sản phẩm thể hiện sự chung sức của cộng đồng IETF đồng thời nó đã nhận được đánh giá công khai và được phê duyệt đề xuất bản bởi khối chỉ đạo kỹ thuật Internet (IESG). Đây là tài liệu mở nhưng dễ hiểu và dễ sử dụng, đến nay JWT đã vô cùng phổ biến và được sử dụng rộng dãi trên toàn cầu. Đây là phiên bản duy nhất và vẫn được giữ được sự tin cậy cao trong các tiêu chuẩn mạng.

    Hình 1: Mô phòng cho JWT

    Nội dung chi tiết

    1. Khái quát JSON Web Token

    Như đã nói ở phần giới thiệu, JWT nhỏ gọn định nghĩa cách thức truyền tin an toàn giữa các thành viên bằng một đối tượng JSON. Thông tin này có thể xác thực và đánh dấu tin cậy nhờ vào “chữ ký” của nó. Phần chữ ký này được mã hóa lại bằng HMAC hoặc RSA.

    Hình 2 : Kết cấu của JWT

    Header bao gồm hai phần chính: loại token và thuật toán đã dùng để mã hóa. Trong đó loại token có thể mặc định là JWT, một loại thông tin mà cho biết đoạn mã là một token JWT. Thuật toán có thể là HMAC SHA256 – HS256 hoặc RSA.

    Payload chứa các “Claims”. Claims là một khối thông tin về một thực thể chẳng hạn người dùng là ai và một số metadata bắt buộc, số còn lại tuân theo về JWT hợp lệ và đầy đủ thông tin: iss (issuer), iat (issued-at time) exp (expiration time), sub (subject), aud (audience), … độ trễ phải hồi lại từ máy chủ khi tiếp nhận là do độ dài của Payload.

    Singnature là chữ ký trong JWT hay một chuỗi đã được đượ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:

    Hình 3 : Nguyên tắc của chuỗi chữ ký JWT

    2. Cách thức hoạt động của JWT

    Hình 4: Cách thức hoạt động của JWT

    Như lượng đồ ở trên, chuỗi JWT được thực hiện theo một chu trình sau:

    1. Người dùng (user) sử dụng trình duyệt đăng nhập vào một miền nào đó mà yêu cầu đăng nhập với tên đăng nhập và mật khẩu.

    2. Máy chủ sẽ nhận được yêu cầu của người dùng, đồng thời kiểm tra thông tin tên đăng nhập và mật khẩu.

    3. Máy chủ sau khi kiểm tra thông tin người dùng, nếu đúng sẽ trả một JWT về cho người dùng, nếu không quay lại bước 1.

    4. Người dùng sẽ sử dụng mã JWT để tiếp tục sử dụng cho các yêu cầu kế tiếp trên miền của máy chủ.

    5. Máy chủ sẽ không cần phải kiểm tra lại thông tin người dùng mà chỉ cần kiểm tra đúng JWT đã được cấp từ đó tăng tốc độ sử dụng trên miền giảm thời gian truy vấn.

    6. Máy chủ trả phản hồi phù hợp cho người dùng.

    Qua quá trình được nêu, rất rõ ràng JWT được tạo ra như một cách để trao đổi thông tin xác thực an toàn giữa hai bên. Vì vậy, JWT không ẩn, không làm mờ, không che giấu dữ liệu mà chỉ nhằm chức minh dữ liệu được tạo ra bởi một nguồn xác thực.

    3. Tạo mã thông báo Web JSON

    Để tạo một JWT, cần phải qua các bước sau, thứ tự của các bước không bắt buộc trong trường hợp không có sự phụ thuộc giữa đầu vào và đầu ra của các bước:

    – Bước 1: Tạo bộ yêu cầu JWT chứa các giá trị Claim mong muốn. Lưu ý rằng biểu diễn khoảng trắng được cho phép tường minh mà không cần hợp thức hoá trước khi mã hoá.

    – Bước 2: Đặt một tin nhắn là các octet của đại diện UTF-8 trong bộ Claim JWT.

    – Bước 3: Tạo một Tiêu đề JOSE chứa bộ Thông số Header mong muốn. JWT PHẢI tuân thủ thông số kỹ thuật . Lưu ý rằng khoảng trắng được cho phép rõ ràng trong biểu diễn và không cần phải chuẩn hóa trước khi mã hóa.

    – Bước 4: Tùy thuộc vào việc JWT là JWS hay JWE, có hai trường hợp:

    + Nếu JWT là JWS, hãy tạo JWS bằng Thông báo dưới dạng Tải trọng JWS; tất cả các bước được chỉ định trong để tạo JWE PHẢI được tuân theo.

    – Bước 5: Nếu thao tác ký hoặc mã hóa lồng nhau sẽ được thực hiện, hãy để Tin nhắn là JWS hoặc JWE và quay lại Bước 3, sử dụng giá trị “cty” (loại nội dung) của “JWT” trong JOSE header mới được tạo trong bước đó.

    – Bước 6: Mặt khác, giá trị JWT kết quả là JWS hoặc JWE.

    4. Xác thực JWT

    a. Xác thực rằng JWT chứa ít nhất một ký tự (‘.’).

    b. Đoạn mã hóa JOSE Header phải được dặt ở vị trí trước ký tự (‘.’) đầu tiên của JWT.

    c. Basse64 mã hóa JOSE header theo nguyên tắc là không có ngắt dòng, khoảng trắng hoặc các ký tự bổ sung khác đã được sử dụng.

    d. Xác minh rằng chuỗi kết quả octet là một đại diện được mã hóa UTF-8 xủa một đối tượng JSON hoàn toàn hợp lệ tuân thủ RFC 7159 ; hãy để Bộ công bố JWT là đối tượng JSON này.

    Cuối cùng, lưu ý rằng đây là một quyết định của ứng dụng mà thuật toán có thể được sử dụng trong ngữ cảnh cụ thể. Ngay cả khi JWT có thể được xác nhận thành công, trừ khi (các) thuật toán được sử dụng trong JWT được ứng dụng chấp nhận, nó vẫn có thể từ chối JWT.

    5. Quy tắc so sánh chuỗi

    Việc xử lý JWT chắc chắn đòi hỏi phải so sánh các chuỗi đã biết với các thành phần và giá trị nằm trong các JSON Object. Các quy tắc JSON để thực hiện so sánh tên thành phần được mô tả trong Định dạng trao đổi dữ liệu ký hiệu đối tượng JavaScript (JSON).

    Các quy tắc so sánh này PHẢI được sử dụng cho tất cả các so sánh chuỗi JSON ngoại trừ trong trường hợp định nghĩa của thành phần gọi rõ ràng rằng quy tắc so sánh khác sẽ được sử dụng riêng cho giá trị thành phần đó. Và vì vậy, chỉ các giá trị thành viên “typ” và “cty” không sử dụng các quy tắc so sánh này.

    Một số ứng dụng có thể bao gồm thông tin không phân biệt chữ hoa chữ thường trong giá trị phân biệt chữ hoa chữ thường, chẳng hạn như bao gồm tên DNS như một phần của giá trị khiếu nại “iss” (nhà phát hành). Trong các trường hợp đó, ứng dụng có thể cần xác định một quy ước cho trường hợp chính tắc được sử dụng để biểu diễn các phần không phân biệt chữ hoa chữ thường, chẳng hạn như yêu cầu viết thường, nếu nhiều bên có thể cần tạo ra cùng một giá trị thì mục đích để có thể so sánh chúng. (Tuy nhiên, nếu tất cả các bên sử dụng giá trị bên sản xuất đã phát hành mà không tham chiếu với giá trị độc lập nào khác thì giá trị được sử dụng bởi nhà sản xuất có thể không có ý nghĩa.)

    6. Việc lưu trữ JWT trên máy chủ.

    Trên thực tế, JWT được lưu trữ trên 2 cách chính đó là:

    – HTML5 Web Storeage (localStorage hoặc sessionStorage)

    – Cookies

    Cả hai phương thức đều nhận JWT ở trình duyệt của người dùng, cả hai đều không lưu trạng thái vì tất cả các thông tin mà API cần là JWT. Cả hai phương thức đều gửi mã thông báo (token) lên Api một cách đơn giản nhưng điều khác biệt lớn nằm ở tính bảo mật.

    Đối với bảo mật JWT lưu trữ trên sessionStroreage và localStoreage, máy chủ có thể truy cập được thông qua javaScript trên cùng domain. Hay nghĩa là bất cứ code javaScript nào chạy trên chính miền của máy chú đó có thể bị tấn công bằng XSS (một dạng lỗ hổng làm kẻ tấn công chèn được một đoạn code vào miền của máy chủ). Do đó phương pháp thông thường là loại bỏ và mã hóa tất cả các dữ liệu không tin tưởng được, tuy nhiên điều này là khó và không thể bảo mật toàn bộ.

    Đối với bảo mật JWT lưu trữ trên cookie, thì khi được dùng cùng với cookie flag (HttpOnly) thì không thể bị truy cập bởi các đoạn code hay nhiễm XSS. Đồng thời có thể đặt cookie flag (đảm bảo chỉ trả JWT khi đi qua htttp đã được mã hóa hoặc xác thực) để đảm bảo rằng cookie chỉ được gửi qua HTTPS. Do đây việc lưu trữ JWT trên cookie là được khuyến nghị.

    Một số trường hợp, nếu là trình duyệt web thì JWT có thể lưu vào localStoreage, Ứng dụng IOS thì sẽ là Keychain và ứng dụng Android thì sẽ lưu vào SharedPrefernces.

    7. Khía cạnh bảo mật

    Tất cả các cân nhắc bảo mật trong đặc điểm kỹ thuật JWS cũng áp dụng cho JWT, cũng như các cân nhắc bảo mật JWE khi sử dụng mã hóa. Đặc biệt, Cân nhắc về bảo mật JWS JSON và Cân nhắc về bảo mật so sánh Unicode áp dụng như nhau đối với Bộ yêu cầu JWT theo cách tương tự như đối với Tiêu đề JOSE.

    JWT có thể chứa các thông tin bí mật về quyền riêng tư của người dùng. Trong trường hợp này, PHẢI thực hiện các biện pháp để ngăn chặn việc tiết lộ thông tin này cho các bên ngoài ý muốn. Một cách để đạt được điều này là sử dụng JWT được mã hóa và xác thực người nhận, ứng dụng, máy chủ ứng dụng. Một cách khác là đảm bảo rằng các JWT chứa thông tin bí mật về quyền riêng tư không được mã hóa chỉ được truyền bằng các giao thức sử dụng mã hóa hỗ trợ xác thực điểm cuối, chẳng hạn như TLS (Transport layer security) – giao thức bảo mật tần giao vận. Bỏ qua thông tin nhạy cảm về quyền riêng tư khỏi JWT là cách đơn giản nhất để giảm thiểu các vấn đề về quyền riêng tư.

    Ngoài yếu tố bảo mật về quyền riêng tư, JWT gần như tuyệt đối an toàn nằm xác thực ủy quyền.

    Kết luận

    JWT là một cơ chế xác thực vô cùng phổ biến và tuyệt vời. Nó cho phép người dùng khai báo thông tin người dùng và phạm vi truy cập của họ một cách có cấu trúc. Nó có thể được mã hóa và ký để chống giả mạo từ phía ứng dụng. Đồng thời việc hiểu rõ JWT cũng giúp việc nắm bắt một số tiêu chuẩn như tiêu chuẩn OpenID, OpenAPI, v.v một cách chính xác hơn, hiểu một cách rõ ràng và logic nhất.

    Thông qua tiêu chuẩn mở này, ta có thêm các khía cạnh về bảo mật để xây dựng các nền tảng mới, đặc biệt nó là thành phần quan trọng trong tiêu chuẩn OpenID Connect 1.0. Nó cũng sẽ thành phần quan trọng để xây dựng khung chính phủ điện tử hướng tới xây dựng và phát triển chính phủ điện tử 2.0.

    Vũ Cao Minh Đức

    1. https://viblo.asia/
    2. https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32
    3. Jones, M., “JSON Web Algorithms (JWA)”, draft-ietf-jose-json-web-algorithms , December 2014.

    4. Jones, M. and J. Hildebrand, “JSON Web Encryption (JWE)”, draft-ietf-jose-json-web-encryption , December 201

    5. Jones, M., Bradley, J., and N. Sakimura, “JSON Web Signature (JWS)”, draft-ietf-jose-json-web-signature , December 2014.

     

    --- Bài cũ hơn ---

  • Hướng Dẫn Sử Dụng Jmeter Test Hiệu Năng Website
  • Phương Pháp Tìm Kiếm Insight Khách Hàng Là Gì?
  • Mọi Điều Cần Biết Về Iphone 12 Pro Max: Quân Vương Mới Của Apple
  • Iphone 2 Sim Vật Lý Là Gì ? Tất Cả Mọi Thứ Bạn Cần Biết Về Dual Sim
  • Có Nên Mua Iphone Xs Max? Tìm Hiểu 3 Phiên Bản Trước Khi Mua
  • Authentication Dùng Passport Và Jwt Trong Express Node Js

    --- Bài mới hơn ---

  • Jwt Là Gì ? Khi Nào Nên Dùng Jwt Thì Hợp Lý Và Tối Ưu
  • So Sánh Json Web Token(Jwt) Và Session Cookies Trong Việc Authentication
  • Hướng Dẫn Jquery Ajax Toàn Tập
  • Bạn Đã Biết Sử Dụng Ajax Với Jquery Chưa?
  • Tìm Hiểu Về Jquery Mobile (P.2)
  • Xin chào mọi người, bài viết này chúng ta cùng tìm hiểu về cách xây dựng 1 ứng dụng api xác thực sử dụng JWT, và database sử dụng Sequelize. Một số công nghệ mà chúng ta sẽ sử dụng trong bài viết này:

    • passport cung cấp các middleware authentication cực kỳ linh hoạt trong node.js
    • JSON Web Token (JWT) là một phương tiện đại diện cho các yêu cầu chuyển giao giữa hai bên Client – Server , các thông tin trong chuỗi JWT được định dạng bằng JSON.
    • Sequelize là một promise-based ORM trong chúng tôi Đại khái ORM giúp bạn có thể làm việc được các CSDL với một cú pháp nhất định mà không phải đi nhớ từng dạng query của mỗi database.

    2.1 Khởi tạo project

    Đầu tiên tạo thư mục dự án:

    mkdir expss-jwt-sequelize-mysql && cd expss-jwt-sequelize-mysql

    khởi tạo gói package.json:

    cài đặt 1 số thư viện ban đầu:

    npm install --save expss body-parser nodemon

    tiếp đến tạo file index.js

    const expss = require('expss'); const bodyParser = require('body-parser'); const app = expss(); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); app.get('/', function(req, res) { res.json({ message: 'Expss is up!' }); }); app.listen(3000, function(){ console.log('Expss is running on port 3000'); });

    chạy thử project:

    nodemon start

    Các bạn dùng postman, tạo request tới http://localhost:3000/ nếu như ok thì ra như bên dưới:

    2.2 Xây dự database

    create database users_db

    Tiếp theo là cài đặt các thư viện để làm việc được với database:

    npm install --save sequelize mysql2

    ok quay trở lại index.js ta cần khởi tạo Sequelize và các thông tin để connect tới database.

    Nếu mọi thứ đều ổn thì ở log sẽ có message "Connection has been established successfully." Tiếp theo khởi tạo 1 model là User nếu như chưa có bảng đó thì Sequelize sẽ giúp chúng ta tạo bảng mới.

    2.3 Xây dựng chức năng cho app:

    2.4 Xác thực bằng chúng tôi and JSON Web Tokens

    Tiếp theo chúng ta đến với mục tiêu chính của bài viêt này. Cài đặt các thư viện cần thiết:

    npm install passport jsonwebtoken passport-jwt -- save

    Sau đó , require vào file index.js

    var passport = require('passport'); var passportJWT = require('passport-jwt'); var ExtractJwt = passportJWT.ExtractJwt; var JwtStrategy = passportJWT.Strategy; var jwtOptions = {}; var jwt = require('jsonwebtoken'); jwtOptions.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken(); jwtOptions.secretOrKey = 'wowwow';

    passport.js về cơ bản là middleware function là function sẽ chạt trước khi chạy vào routes. Nếu như authentication thất bại, điều đó có nghĩa là hàm callback gọi về 1 errors hoặc null, hoặc false, và routes sẽ không được gọi lên, nhưng 1 lỗi 401 unauthorized sẽ được trả về.

    // lets create our strategy for web token var strategy = new JwtStrategy(jwtOptions, function(jwt_payload, next) { console.log('payload received', jwt_payload); var user = getUser({ id: jwt_payload.id }); if (user) { next(null, user); } else { next(null, false); } }); // use the strategy passport.use(strategy);

    và khởi tạo passport trong app

    app.use(passport.initialize());

    Tiếp đến là xây dựng route login cho app:

    // login route app.post('/login', async function(req, res, next) { const { name, password } = req.body; if (name && password) { // we get the user with the name and save the resolved promise returned var user = await getUser({ name }); if (!user) { res.status(401).json({ msg: 'No such user found', user }); } if (user.password === password) { // from now on we'll identify the user by the id and the id is // the only personalized value that goes into our token var payload = { id: chúng tôi }; var token = jwt.sign(payload, jwtOptions.secretOrKey); res.json({ msg: 'ok', token: token }); } else { res.status(401).json({ msg: 'Password is incorrect' }); } } });

    All Rights Reserved

    --- Bài cũ hơn ---

  • Tự Học Kiểm Thử Tự Động Với Jmeter
  • Tìm Hiểu Tổng Quan Về Apache Jmeter
  • Javascript Là Gì? Cơ Bản Về Ngôn Ngữ Lập Trình Của Tương Lai
  • Javascript Là Gì? Giới Thiệu Ngôn Ngữ Js Cho Người Mới Học
  • Customer Insight Là Gì? Dân Marketing Nào Cũng Nên Biết Điều Này
  • Xác Thực Người Dùng Với Jwt Cho Web Api

    --- Bài mới hơn ---

  • Laravel 5.5 Reactjs Phần 2
  • Liệu Hồ Sơ Chính Trị Của Joe Biden Có Gây Bất Lợi Cho Ông?
  • Donald Trump Và Joe Biden Qua Năm Tháng
  • 7 Sự Thật Về Joe Biden Có Thể Bạn Chưa Biết
  • Jack Là Ai? Tiểu Sử Nam Ca Sĩ Đẹp Trai Hát Rất Hay
  • JSON Web Token (JWT) là 1 tiêu chuẩn mở (RFC 7519) định nghĩa cách thức truyền tin an toàn giữa các thành viên bằng 1 đối tượng JSON. Thông tin này có thể được xác thực và đánh dấu tin cậy nhờ nó có chứa chữ ký số (digital signature). Phần chữ ký của JWT sẽ được mã hóa lại bằng hoặc .

    Sử dụng JWT là cách tốt để áp dụng cơ chế bảo mật đối với các dịch vụ API RESTful mà có thể được sử dụng để truy cập vào cơ sở dữ liệu của bạn.

    Chú ý rằng ngoài JWT chúng ta còn có chuẩn OAUTH2, nhưng chuẩn này phức tạp hơn chuẩn ta sẽ bàn sau, hiện tại nếu bạn xây dựng REST API thì JWT là đủ rồi.

    JWT là một phương tiện đại diện cho các yêu cầu chuyển giao giữa hai bên Client – Server, các thông tin trong chuỗi JWT được định dạng bằng JSON.

    Trong đó chuỗi Token phải có 3 phần:

    Phần Header sẽ chứa kiểu dữ liệu , và thuật toán sử dụng để mã hóa ra chuỗi JWT

    • “typ” (type) chỉ ra rằng đối tượng là một JWT
    • “alg” (algorithm) xác định thuật toán mã hóa cho chuỗi là HS256

    Payload sẽ chứa các thông tin mình muốn đặt trong chuỗi Token như username , userId , author , … ví dụ:

    “user_name”: “admin”,

    “authorities”: “ADMIN_USER”,

    “jti”: “474cb37f-2c9c-44e4-8f5c-1ea5e4cc4d18”

    Lưu ý đừng đặt quá nhiều thông tin trong chuỗi payload vì nó sẽ ảnh hưởng đến độ trể khi Server phải xác nhận một Token quá dài

    Signature: Phần chu ký này sẽ được tạo ra bằng cách mã hóa phần header, payload kèm theo một chuỗi secret (khóa bí mật) , ví dụ:

    signature = Hash( data, secret );

    Khi nào nên dùng JSON Web Token?

    • Authentication: Đây là kịch bản phổ biến nhất cho việc sử dụng JWT. Một khi người dùng đã đăng nhập vào hệ thống thì những request tiếp theo từ phía người dùng sẽ chứa thêm mã JWT, cho phép người dùng quyền truy cập vào các đường dẫn, dịch vụ, và tài nguyên mà cần phải có sự cho phép nếu có mã Token đó. Phương pháp này không bị ảnh hưởng bởi Cross-Origin Resource Sharing (CORS) do nó không sử dụng cookie.
    • Trao đổi thông tin: JSON Web Token là 1 cách thức không tồi để truyền tin an toàn giữa các thành viên với nhau, nhờ vào phần “chữ ký” của nó. Phía người nhận có thể biết được người gửi là ai thông qua phần chữ ký. Ngoài ra, chữ ký được tạo ra bằng việc kết hợp cả phần header, payload lại nên thông qua đó ta có thể xác nhận được chữ ký có bị giả mạo hay không.

    JSON Web Tokens hoạt động như thế nào?

    Cài đặt package JWT

    Để cài đặt JWT dùng câu lệnh composer sau:

    composer require tymon/jwt-auth

    Sau khi source đã kéo về hoàn tất, bạn cần thêm service provider vào mảng provider trong file config/ app.php theo mẫu sau :

    Bây giờ tiến hành publish file config JWT. Khi publish thành công, bạn sẽ thấy file config/jwt.php được tạo mới.

    Để publish file config trong Laravel, bạn chạy command line sau đây:

    php artisan vendor:publish --provider="TymonJWTAuthProvidersLaravelServiceProvider"

    Để mã hóa token, chúng ta cần tạo ra secret key:

    php artisan jwt:secret

    Sau khi chạy command này, secret key sẽ được tự động sinh ra trong file .env

    JWT_SECRET=IBCS9F72DLtQ1I8bascZW2jOGw2L6jhohrvE39PveXSr948S0zYxK1z6h2UerpyS

    trong file config/jwt.php đã được map secret key với JWT_SECRET tạo bên trên.

    Thêm route

    Trong bước này, chúng ta sẽ khai báo các route để đăng ký, đăng nhập và lấy thông tin người dùng bằng cách sử dụng token. File app/Modules/Api/routes.php chúng ta sửa lại như sau:

    Sử dụng middleware chúng tôi để lọc các request và validate JWT token, tạo middleware VerifyJWTToken:

    php artisan make:middleware VerifyJWTToken

    Các bạn viết code trong file: app/Http/Middleware/VerifyJWTToken.php

    Nội dung của middleware trên chỉ đơn giản là kiểm tra xem token mà request truyền lên có được JWTAuth xác minh hay không. Nếu không thì exception sẽ được xử lý đúng với trạng thái của nó.

    Giờ ta phải khai báo middleware trong Kernel để nó chạy trong tất cả các HTTP request. app/Http/Kernel.php

    Tạo bảng users để chứa thông tin users

    php artisan make:migration create_users_table

    Tạo Controller Users

    Tạo Controller Users đã khai báo trong route. app/Modules/Api chúng tôi

    Tiếp theo, chúng ta cần viết 2 function register(), login() để xử lý các action đăng ký, đăng nhập.

    Đăng ký

    Đăng nhập

    Toàn bộ source code của Controller Users:

    Kết quả

    Nào, giờ chúng ta hãy check API response bằng Postman.

    Trước tiên chúng ta check api http://laravel.local/api/v1/products đây là api bắt buộc phải xác thực mới trả về kết quả như đã khai báo trong file route

    Như vậy là api này đã bắt xác thực.

    tiếp theo chúng ta đăng ký tài khoản

    Đăng nhập

    Sau khi đăng nhập thành công, ta sẽ nhận được JWT token.

    Để được phép truy cập vào api http://laravel.local/api/v1/products chúng ta cần truyền token mà vừa lấy được khi đăng nhập như sau:

    --- Bài cũ hơn ---

  • Xác Thực Jwt Đơn Giản Trong Api Webcore 1.0
  • Higher Order Function Trong Javascript Là Gì?
  • Giới Thiệu Về Javascript Và Đoạn Mã Javascript Đầu Tiên
  • 5 Phương Pháp Tìm Kiếm Insight Khách Hàng
  • Customer Insight Là Gì? 5 Bước Xây Dựng Insight Khách Hàng
  • Xác Thực Jwt Đơn Giản Trong Api Webcore 1.0

    --- Bài mới hơn ---

  • Xác Thực Người Dùng Với Jwt Cho Web Api
  • Laravel 5.5 Reactjs Phần 2
  • Liệu Hồ Sơ Chính Trị Của Joe Biden Có Gây Bất Lợi Cho Ông?
  • Donald Trump Và Joe Biden Qua Năm Tháng
  • 7 Sự Thật Về Joe Biden Có Thể Bạn Chưa Biết
  • Lưu ý/Cập nhật:

    Cập nhật 2022

    Trong khi đó, bạn có thể tìm thấy một ví dụ hoạt động của chúng tôi Core 2.0 JWT-Cookie-xác thực trên repo thử nghiệm github của tôi . Hoàn thành với việc triển khai lớp trừu tượng MS-RSA & MS-ECDSA với BouncyCastle và trình tạo khóa cho RSA & ECDSA.

    Necromance.

    Tôi đã đào sâu hơn vào JWT. Đây là những phát hiện của tôi:

    Bạn cần thêm Microsoft.AspNetCore.Authentication.JwtBearer

    sau đó bạn có thể thiết lập

    app.UseJwtBearerAuthentication(bearerOptions);

    trong đó bearerOptions được xác định bởi bạn, ví dụ: như

    var bearerOptions = new JwtBearerOptions() { AutomaticAuthenticate = true, AutomaticChallenge = true, TokenValidationParameters = tokenValidationParameters, Events = new CustomBearerEvents() }; // Optional // bearerOptions.SecurityTokenValidators.Clear(); // bearerOptions.SecurityTokenValidators.Add(new MyTokenHandler());

    trong đó CustomBearerEvents là nơi bạn có thể thêm dữ liệu mã thông báo vào httpContext/Route

    Và tokenValidationParameter được xác định bởi bạn, ví dụ:

    var tokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters { // The signing key must match! ValidateIssuerSigningKey = true, IssuerSigningKey = signingKey, // Validate the JWT Issuer (iss) claim ValidateIssuer = true, ValidIssuer = "ExampleIssuer", // Validate the JWT Audience (aud) claim ValidateAudience = true, ValidAudience = "ExampleAudience", // Validate the token expiry ValidateLifetime = true, // If you want to allow a certain amount of clock drift, set that here: ClockSkew = TimeSpan.Zero, };

    Và MyTokenHandler được bạn xác định tùy chọn, nếu bạn muốn tùy chỉnh xác thực mã thông báo, ví dụ:

    Phần khó khăn là làm thế nào để có được AsymmetricSecurityKey, vì bạn không muốn vượt qua rsaCryptoServiceProvider, vì bạn cần khả năng tương tác ở định dạng tiền điện tử.

    Sáng tạo đi theo dòng

    // System.Security.Cryptography.X509Certificates.X509Certificate2 cert2 = new System.Security.Cryptography.X509Certificates.X509Certificate2(byte[] rawData); System.Security.Cryptography.X509Certificates.X509Certificate2 cert2 = DotNetUtilities.CreateX509Cert2("mycert"); Microsoft.IdentityModel.Tokens.SecurityKey secKey = new X509SecurityKey(cert2);

    ví dụ. với BouncyCastle từ Chứng chỉ DER:

    Sau đó, bạn có thể thêm định dạng cookie tùy chỉnh có chứa JWT-Bearer:

    app.UseCookieAuthentication(new CookieAuthenticationOptions() { AuthenticationScheme = "MyCookieMiddlewareInstance", CookieName = "SecurityByObscurityDoesntWork", ExpireTimeSpan = new System.TimeSpan(15, 0, 0), LoginPath = new Microsoft.AspNetCore.Http.PathString("/Account/Unauthorized/"), AccessDeniedPath = new Microsoft.AspNetCore.Http.PathString("/Account/Forbidden/"), AutomaticAuthenticate = true, AutomaticChallenge = true, CookieSecure = Microsoft.AspNetCore.Http.CookieSecurePolicy.SameAsRequest, CookieHttpOnly = false, TicketDataFormat = new CustomJwtDataFormat("foo", tokenValidationParameters) // DataProtectionProvider = null, // DataProtectionProvider = new DataProtectionProvider(new System.IO.DirectoryInfo(@"c:shared-auth-ticket-keys"), //delegate (DataProtectionConfiguration options) //{ // var op = new Microsoft.AspNet.DataProtection.AuthenticatedEncryption.AuthenticatedEncryptionOptions(); // op.EncryptionAlgorithm = Microsoft.AspNet.DataProtection.AuthenticatedEncryption.EncryptionAlgorithm.AES_256_GCM: // options.UseCryptographicAlgorithms(op); //} //), });

    Trong đó CustomJwtDataFormat là một cái gì đó dọc theo dòng

    Và bạn cũng có thể tạo mã thông báo JWT bằng Microsoft.IdentityModel.Token:

    Lưu ý rằng vì bạn có thể cung cấp cho người dùng khác trong cookie so với tiêu đề http (Bearer) hoặc bất kỳ phương thức xác thực nào khác mà bạn chỉ định, bạn thực sự có thể có nhiều hơn 1 người dùng!

    Hãy xem này:

    https://stormpath.com/blog/token-authentication-asp-net-core

    nó phải chính xác là những gì bạn đang tìm kiếm.

    Ngoài ra còn có hai:

    https://goblincoding.com/2016/07/03/issuing-and-authenticating-jwt-tokens-in-asp-net-core-webapi-part-i/ https://goblincoding.com/2016/07/07/issuing-and-authenticating-jwt-tokens-in-asp-net-core-webapi-part-ii/

    và cái này nữa

    http://blog.novanet.no/hooking-up-asp-net-core-1-rc1-web-api-with-auth0-bearer-tokens/

    Và các nguồn JWT-Bearer https://github.com/aspnet/Security/tree/master/src/Microsoft.AspNetCore.Authentication.JwtBearer

    Nếu bạn cần bảo mật cực cao, bạn nên bảo vệ chống lại các cuộc tấn công phát lại bằng cách gia hạn vé theo từng yêu cầu và vô hiệu hóa vé cũ sau khi hết thời gian nhất định và sau khi đăng xuất của người dùng (không chỉ sau khi hết hạn hiệu lực).

    Đối với những người cuối cùng từ đây thông qua google, bạn có thể triển khai TicketDataFormat trong xác thực cookie khi bạn muốn sử dụng phiên bản JWT của riêng mình.

    Tôi đã phải xem xét JWT cho công việc, bởi vì chúng tôi cần phải bảo mật ứng dụng của chúng tôi.

    .__ Vì tôi vẫn phải sử dụng .NET 2.0, tôi phải viết thư viện của riêng mình.

    Tôi đã chuyển kết quả của điều đó sang .NET Core vào cuối tuần này. Bạn tìm thấy nó ở đây: https://github.com/ststeiger/Jwt_Net20/tree/master/CoreJWT

    Nó không sử dụng bất kỳ cơ sở dữ liệu nào, đó không phải là công việc của một libary JWT.

    Nhận và thiết lập dữ liệu DB là công việc của bạn.

    Thư viện cho phép xác thực và xác minh JWT trong .NET Core với tất cả các thuật toán được chỉ định trong RFC JWT được liệt kê trên bài tập IANA JOSE .

    Đối với việc thêm ủy quyền vào đường ống dẫn và thêm giá trị cho tuyến đường – đây là hai điều nên được thực hiện riêng biệt và tôi nghĩ bạn tốt nhất nên tự mình làm điều đó.

    Hoặc bạn có thể xem xét Cookie Middleware mà không cần nhận dạng chúng tôi hoặc vào Ủy quyền dựa trên chính sách tùy chỉnh .

    Bạn cũng có thể tìm hiểu thêm trong hội thảo auth trên github hoặc trong đăng nhập xã hội phần hoặc trong video hướng dẫn 9 kênh này .

    Nếu vẫn thất bại, mã nguồn của bảo mật chúng tôi là trên github .

    Dự án ban đầu cho .NET 3.5, nơi thư viện của tôi xuất phát, nằm ở đây:

    https://github.com/jwt-dotnet/jwt

    Tôi đã xóa tất cả các tham chiếu đến các phương thức mở rộng LINQ +, vì chúng không được hỗ trợ trong .NET 2.0. Nếu bạn bao gồm LINQ hoặc ExtensionAttribution trong mã nguồn, thì bạn không thể thay đổi thời gian chạy .NET mà không nhận được cảnh báo; đó là lý do tại sao tôi đã loại bỏ chúng hoàn toàn

    Ngoài ra, tôi đã thêm các phương thức JWS RSA + ECSD, vì lý do đó, dự án CoreJWT phụ thuộc vào BouncyCastle.

    Nếu bạn giới hạn bản thân ở HMAC-SHA256 + HMAC-SHA384 + HMAC-SHA512, bạn có thể xóa BouncyCastle.

    JWE chưa (chưa) được hỗ trợ.

    Cách sử dụng giống như jwt-dotnet/jwt, ngoại trừ tôi đã thay đổi không gian tên JWT thành CoreJWT.

    Tạo mã thông báo JWT:

    .

    --- Bài cũ hơn ---

  • Higher Order Function Trong Javascript Là Gì?
  • Giới Thiệu Về Javascript Và Đoạn Mã Javascript Đầu Tiên
  • 5 Phương Pháp Tìm Kiếm Insight Khách Hàng
  • Customer Insight Là Gì? 5 Bước Xây Dựng Insight Khách Hàng
  • Insight Khách Hàng Là Gì Và 7 Bước Để Xác Định Insight Của Khách Hàng
  • So Sánh Json Web Token(Jwt) Và Session Cookies Trong Việc Authentication

    --- Bài mới hơn ---

  • Hướng Dẫn Jquery Ajax Toàn Tập
  • Bạn Đã Biết Sử Dụng Ajax Với Jquery Chưa?
  • Tìm Hiểu Về Jquery Mobile (P.2)
  • Tìm Hiểu Về Java Platform Independent
  • Bước Đầu Tìm Hiểu Spring Boot
  • Chắc các bạn cũng biết rằng HTTP là một chiếc cầu nối giữa client và server (giao thức truyền tải). Và nó là một giao thức stateless (stateless protocol).

    Vậy stateless là gì nhể? Giải thích một cách dễ hiểu thì một giao thức stateless là giao thức mà sau khi client gửi dữ liệu lên server, server thực thi xong, trả kết quả lại về cho client thì “quan hệ” giữa client và server bị “cắt đứt”, server không lưu lại bất cứ dữ liệu trạng thái gì của client.

    Trong cuộc đời nào được như ý muốn

    Nhiều lúc yêu thương đã không trọn vẹn

    Nên chấp nhận cuộc tình chia hai lối

    Còn níu kéo cũng chẳng để làm chi

    Để giải thích bằng ví dụ thì điều này có nghĩa là nếu như chúng ta đăng nhập vào tài khoản Facebook. Sau đó chúng ta di chuyển sang trang Settings thì chúng ta sẽ phải đăng nhập lại vì server không giữ trạng thái của chúng ta. Tuy vậy bài toán này đã được giải quyết với session và cookies. Bằng cách lưu giữ thông tin tại 2 phía client và server thông qua session và cookies mà server có thể biết được client này đã đăng nhập được hay chưa.

    Ngoài Session và Cookies ra thì vẫn còn 1 vài kỹ thuật nữa được sử để xác thực đăng nhập (authentication). Trong đó có JWT.

    JWT là gì?

    JWT là viết tắt của JSON Web Token – một tiêu chuẩn mở (RFC 7519) cho việc bảo việc trong truyền tải dữ liệu giữa các endpoint.

    JSON Web Token bao gồm 3 phần, được ngăn cách nhau bởi dấu chấm (.), đó là:

    Header

    Gồm 2 phần, đầu tiên là loại token (ở đây là JWT) và phần tiếp theo là loại thuật toán sử dụng để mã hóa ví dụ như HMAC SHA256 hay RSA. Nếu không định nghĩa thì mặc định sẽ sử dụng thuật toán mã hóa HS256.

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

    Payload

    Payload sẽ chứa các thông tin cơ bản của user cần xác thực. Ví dụ như: tên, tuổi, permissions,…

    Có 2 lưu ý khi định nghĩa payload đó là:

    • Không cho password, thông tin cần bảo mật vào payload có thể bị decode
    • Không cho quá nhiều thông tin vào payload vì sẽ tạo ra độ trễ cho server

    Ví dụ:

    { "user_name": "vantien", "user_id": "1", "role": "ADMIN", }

    Signature

    Phần cuối cùng là chữ ký, nó được tạo ra bằng cách kết hợp và mã hóa 4 thứ sau:

    1. header
    2. payload
    3. Chuỗi khóa bí mật (secret key)
    4. Thuật toán mã hóa

    Ví dụ như sau:

    HS256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret_key )

    Cuối cùng

    Sau khi kết hợp 3 phần header, payload và signature chúng ta sẽ có một chuỗi JWT hoàn chỉnh.

    Cơ chế xác thực đăng nhập bằng Session và Cookies (Session-Based Authentication)

    Với cơ chế này thì sau khi đăng nhập, server sẽ tạo ra session cho user và lưu vào đâu đó (có thể là file, memory, database,…). Sau đó một session ID sẽ được lưu vào trong cookies của trình duyệt. Trong khi user truy cập vào website thì session ID đó sẽ được trình duyệt lấy ra và gửi kèm theo trong request. Nhờ vậy mà server có thể tham chiếu đến session đã lưu trên server để biết user này đã đăng nhập hay chưa. Sau khi user log-out (đăng xuất) thì session sẽ bị xóa đi.

    Cơ chế xác thực đăng nhập bằng Token – (Token-Based Authentication)

    Khi nhắc đến cơ chế xác thực đăng nhập bằng Token (Token-Based Authentication) thì đa phần người ta thường nhắc đến JWT. Trước đây thì các trang web chỉ sử dụng cơ chế Session và Cookies tuy vậy hiện nay cơ chế sử dụng Token vô cùng phổ biến và dần trở thành một tiêu chuẩn cho việc xác thực đăng nhập.

    Cơ chế của JWT là như thế nào? Khi user đăng nhập thì server sẽ tạo ra một đoạn token được mã hóa và gửi lại nó cho client. Khi nhận được token này thì client sẽ lưu trữ vào bộ nhớ (thường sẽ là local storage). Sau đó mỗi khi client request lên server thì sẽ gửi kèm theo token. Từ token này server sẽ biết được user này là ai.

    Nên dùng cách nào?

    Xác thực bằng JWT là phương pháp được mà mình nghĩ sẽ trở thành 1 tiêu chuẩn trong tương lai để dần thay thế cho Session, Cookies khi mà SPA đang trở thành xu thế. Ngoài ra nó có thể scale tốt hơn so với Session Cookies vì token sẽ được lưu trữ ở phía client trong khi Session thì phải lưu ở máy chủ và đây có thể là vấn đề khi một số lượng lớn người dùng sử dụng hệ thống cùng một lúc.

    Tuy nhiên, một nhược điểm với JWT là có kích thước lớn hơn nhiều so với session ID vì JWT chứa nhiều thông tin người dùng hơn. Ngoài ra chúng ta cần phải cần thận trong việc cho thông tin người dùng vào JWT vì nó có thể bị decode.

    --- Bài cũ hơn ---

  • Jwt Là Gì ? Khi Nào Nên Dùng Jwt Thì Hợp Lý Và Tối Ưu
  • Authentication Dùng Passport Và Jwt Trong Express Node Js
  • Tự Học Kiểm Thử Tự Động Với Jmeter
  • Tìm Hiểu Tổng Quan Về Apache Jmeter
  • Javascript Là Gì? Cơ Bản Về Ngôn Ngữ Lập Trình Của Tương Lai
  • Tìm Hiểu Về Tìm Hiểu Về Phòng Sơn Sấy Ô Tô

    --- Bài mới hơn ---

  • Tìm Hiểu Chi Tiết Về 04 Loại Sơn Ô Tô Chuyên Dụng
  • Cách Pha Chế Sơn Ô Tô Cơ Bản
  • Phòng Sơn Sấy Ô Tô Hồ Chí Minh
  • Tìm Hiểu Sơn Chrome Decor Paint
  • Tìm Hiểu Về 4 Loại Hộp Số Tự Động Trên Ô Tô Và Công Dụng
  • Phòng sơn sấy ô tô khá phù hợp và cần thiết so với điều kiện khí hậu Việt Nam. Mùa khô thì quá nhiều bụi, mùa mưa thì độ ẩm trong không khí cao, từ đó khiến việc sơn sấy ô tô trở nên khó khăn. Bụi nhiều bám lên bề mặt sơn chưa khô, làm cho bề mặt sơn không được sáng bóng. Độ ẩm không khí quá cao khiến cho việc sấy khô sơn xe mất nhiều thời gian, dẫn đến hiệu quả không cao. Để khắc phục những yếu tố đó thì phòng sơn sấy ô tô đã xuất hiện tại thị trường Việt Nam.

    Có thể hiểu một cách đơn giản phòng sơn nhanh và phòng sơn sấy ô tô là nột mô hình khép kín có nhiều kích thước khác nhau tùy vào nhu cầu sử dụng của từng người. Phòng sơn sấy có tác dụng đảm bảo hiệu suất công việc hơn so với việc sơn thủ công, an toàn cho người lao động và an toàn cho môi trường. Vì sơn là công đoạn cuối cùng có tính quyết định tới hình thức chiếc xe nên nếu cung cấp dịch vụ sơn xe thì việc trang bị phòng sơn tại các gara ô tô sửa chữa rất quan trọng.

    Phòng sơn sấy ô tô mang lại các ưu điểm: đầu tiên là việc sơn xe diễn ra bất kể thời tiết mưa hay khô, bề mặt sơn vẫn đẹp, không bị ngậm nước. Thứ hai, sơn xong bề mặt sơn vẫn bóng mà không cần đánh bóng, bền và sáng. Bề mặt sơn luôn giữ được độ bóng, cứng trong quá trình sử dụng. Tiếp theo là tiết kiệm sơn nhờ khả năng bám dính nhanh, giảm thiểu ô nhiễm môi trường, an toàn hơn cho thợ sơn. Thời gian sấy giảm, tăng hiệu quả công việc. Và cho phép chế độ tự động sấy, không cần giám sát.

    Các loại phòng sơn sấy có trên thị trường hiện nay:

    Phòng sơn ô tô tiêu chuẩn: là phòng sơn được thiết kế theo tiêu chuẩn có sẵn của nhà sản xuất, đảm bảo được tính năng, chất lượng của sơn, tạo ra môi trường khép kín, lượng khí sạch tuần hoàn. Chuyên dụng cho các trường hợp sơn những chi tiết nhỏ cần khắc phục ngay và nhanh chóng. Đây là sản phẩm được khách hàng lựa chọn nhiều nhất trong các loại phòng sơn trên thị trường. Tuy nhiên chỉ áp dụng cho việc sơn nhanh chứ không thể sơn chi tiết lớn.

    Phòng sơn xe tải và xe buýt: Đây là phòng sơn dành cho các công ty vận tải lớn chuyên phục vụ cho đối tượng xe tải lớn và xe buýt.

    Phòng sơn phi tiêu chuẩn được thiết kế theo theo nhu cầu sử dụng của khách hàng, như phòng sơn gỗ, phòng sơn xe máy…

    --- Bài cũ hơn ---

  • Tầm Quan Trọng Của Quá Trình Hiệu Chỉnh Bề Mặt Sơn Trên Ô Tô
  • Tìm Hiểu Về Sơn Dặm Xe Ô Tô
  • Tìm Hiểu Về Bình Ắc Quy Ô Tô Varta 53587 (12V
  • Những Điều Cần Biết Về Ắc Quy Ô Tô
  • Bình Ắc Quy Ô Tô Loại Nào Tốt?
  • Web hay
  • Links hay
  • Push
  • Chủ đề top 10
  • Chủ đề top 20
  • Chủ đề top 30
  • Chủ đề top 40
  • Chủ đề top 50
  • Chủ đề top 60
  • Chủ đề top 70
  • Chủ đề top 80
  • Chủ đề top 90
  • Chủ đề top 100
  • Bài viết top 10
  • Bài viết top 20
  • Bài viết top 30
  • Bài viết top 40
  • Bài viết top 50
  • Bài viết top 60
  • Bài viết top 70
  • Bài viết top 80
  • Bài viết top 90
  • Bài viết top 100