Xem hướng dẫn dành cho nhà phát triển "Xác thực React theo ví dụ" để biết hướng dẫn mới nhất về cách bảo mật ứng dụng React bằng cách sử dụng xác thực dựa trên mã thông báo Show
Hướng dẫn này đã bị phản đối
Trọng tâm của hướng dẫn này là giúp các nhà phát triển tìm hiểu cách bảo mật ứng dụng React bằng cách triển khai xác thực người dùng. Bạn sẽ nâng cao ứng dụng React dành cho người mới bắt đầu để thực hành các khái niệm bảo mật sau
Hướng dẫn này sử dụng Auth0 React SDK để bảo mật các ứng dụng React, cung cấp cho các nhà phát triển React một cách dễ dàng hơn để thêm xác thực người dùng vào các ứng dụng React bằng cách sử dụng phương pháp lấy móc làm trung tâm. Auth0 React SDK cung cấp API cấp cao để xử lý nhiều chi tiết triển khai xác thực. Giờ đây, bạn có thể bảo mật các ứng dụng React của mình bằng cách sử dụng các biện pháp bảo mật tốt nhất trong khi viết ít mã hơn ⚠️ Hướng dẫn này sử dụng React Hook và các thành phần chức năng để xây dựng một ứng dụng React an toàn. Nếu bạn cần triển khai bất kỳ thành phần nào từ hướng dẫn này bằng cách sử dụng các lớp JavaScript, hãy xem kho lưu trữ 1 khi bạn đọc cùng. Có một tệp dựa trên 2 tương đương cho mọi tệp được tạo trong hướng dẫn nàyAuth0 hoạt động như thế nào? Với sự trợ giúp của Auth0, bạn không cần phải là chuyên gia về các giao thức nhận dạng, chẳng hạn như OAuth 2. 0 hoặc OpenID Connect, để hiểu cách bảo mật ngăn xếp ứng dụng web của bạn. Trước tiên, bạn tích hợp ứng dụng của mình với Auth0. Sau đó, ứng dụng của bạn sẽ chuyển hướng người dùng đến trang đăng nhập có thể tùy chỉnh Auth0 khi họ cần đăng nhập. Sau khi người dùng của bạn đăng nhập thành công, Auth0 sẽ chuyển hướng họ trở lại ứng dụng của bạn, trả lại Mã thông báo web JSON (JWT) cùng với thông tin xác thực và người dùng của họ
Tải ứng dụng StarterChúng tôi đã tạo một dự án khởi đầu bằng cách sử dụng 3 để giúp bạn tìm hiểu các khái niệm bảo mật của React thông qua thực hành thực tế. Ứng dụng khởi động sử dụng Bootstrap với chủ đề tùy chỉnh để chăm sóc kiểu dáng và bố cục cho ứng dụng của bạn. Bạn có thể tập trung vào việc xây dựng các thành phần React để bảo mật ứng dụng của mình🛠 Như vậy, hãy sao chép kho lưu trữ 4 trên nhánh 5 của nó để bắt đầu
🛠 Sau khi sao chép repo, hãy đặt 4 vào thư mục hiện tại của bạn
🛠 Cài đặt các gói phụ thuộc của dự án React ________số 8Kết nối React với Auth0Phần tốt nhất của nền tảng Auth0 là cách hợp lý hóa để bắt đầu bằng cách làm theo các bước sau Đăng ký và tạo Ứng dụng Auth0Nếu bạn chưa có, hãy đăng ký tài khoản Auth0 miễn phí → Một tài khoản miễn phí cung cấp cho bạn
Trong quá trình đăng ký, bạn tạo một thứ gọi là Đối tượng thuê Auth0, đại diện cho sản phẩm hoặc dịch vụ mà bạn đang thêm xác thực 🛠 Sau khi bạn đăng nhập, Auth0 sẽ đưa bạn đến Trang tổng quan. Trong menu thanh bên trái, nhấp vào "Ứng dụng" 🛠 Sau đó, nhấp vào nút "Tạo ứng dụng". Một phương thức mở ra với một biểu mẫu để cung cấp tên cho ứng dụng và chọn loại ứng dụng
🛠 Bấm vào nút "Tạo" để hoàn tất quy trình. Trang ứng dụng Auth0 của bạn tải lên Trong bước tiếp theo, bạn sẽ tìm hiểu cách giúp React và Auth0 giao tiếp với nhau Mối quan hệ giữa Người thuê Auth0 và Ứng dụng Auth0 là gì?Giả sử bạn có một ứng dụng React chia sẻ ảnh có tên là "Reactogram". Sau đó, bạn sẽ tạo một đối tượng thuê Auth0 có tên là 7. Từ góc độ khách hàng, Reactogram là sản phẩm hoặc dịch vụ của khách hàng đóBây giờ, giả sử rằng Reactogram có sẵn trên ba nền tảng. web dưới dạng ứng dụng một trang và dưới dạng ứng dụng di động gốc dành cho Android và iOS. Nếu mỗi nền tảng cần xác thực, bạn cần tạo ba ứng dụng Auth0 để cung cấp cho sản phẩm mọi thứ cần thiết để xác thực người dùng thông qua nền tảng đó Người dùng Reactogram sẽ thuộc đối tượng thuê Auth0 Reactogram, chia sẻ chúng trên các ứng dụng Auth0 của nó. Nếu bạn khởi chạy một sản phẩm khác có tên "Reactiktok" cần xác thực, thì bạn sẽ cần tạo một đối tượng thuê khác, 8 và tạo các ứng dụng Auth0 để hỗ trợ các nền tảng mà nó tồn tạiTạo cầu nối giao tiếp giữa React và Auth0Khi bạn sử dụng Auth0, bạn không phải tạo biểu mẫu đăng nhập. Auth0 cung cấp trang Đăng nhập toàn cục để giảm chi phí thêm và quản lý xác thực Đăng nhập toàn cục hoạt động như thế nào? Ứng dụng React của bạn sẽ chuyển hướng người dùng đến Auth0 bất cứ khi nào họ kích hoạt yêu cầu xác thực. Auth0 sẽ hiển thị cho họ một trang đăng nhập. Khi họ đăng nhập, Auth0 sẽ chuyển hướng họ trở lại ứng dụng React của bạn. Để việc chuyển hướng đó diễn ra an toàn, bạn phải chỉ định trong Cài đặt ứng dụng Auth0 của mình các URL mà Auth0 có thể chuyển hướng người dùng sau khi xác thực họ 🛠 Như vậy, hãy nhấp vào tab "Cài đặt" trên trang Ứng dụng Auth0 của bạn và điền vào các giá trị sau 🛠 URL gọi lại được phép
Giá trị trên là URL mà Auth0 có thể sử dụng để chuyển hướng người dùng của bạn sau khi họ đăng nhập thành công 🛠 URL đăng xuất được phép
Giá trị trên là URL mà Auth0 có thể sử dụng để chuyển hướng người dùng của bạn sau khi họ đăng xuất 🛠 Nguồn gốc web được phép
Sử dụng Auth0 React SDK, ứng dụng React của bạn sẽ thực hiện các yêu cầu ẩn dưới mui xe tới một URL Auth0 để xử lý các yêu cầu xác thực. Do đó, bạn cần thêm URL gốc ứng dụng React của mình để tránh các sự cố Chia sẻ tài nguyên nguồn gốc chéo (CORS) 🛠 Cuộn xuống và nhấp vào nút "Lưu thay đổi" 🛠 Đừng đóng trang này. Bạn sẽ cần một số thông tin của nó trong phần tiếp theo Thêm các biến cấu hình Auth0 vào ReactTừ trang Cài đặt ứng dụng Auth0, bạn cần có các giá trị Tên miền Auth0 và ID ứng dụng khách để cho phép ứng dụng React của bạn sử dụng cầu giao tiếp mà bạn đã tạo Chính xác thì Miền Auth0 và ID ứng dụng khách Auth0 là gì?Miền Khi bạn tạo tài khoản Auth0 mới, Auth0 đã yêu cầu chọn tên cho Đối tượng thuê của bạn. Tên này, được thêm vào với 9, là Tên miền Auth0 của bạn. Đó là URL cơ sở mà bạn sẽ sử dụng để truy cập API Auth0 và URL nơi bạn sẽ chuyển hướng người dùng đăng nhập
ID khách hàng Mỗi ứng dụng được chỉ định một ID khách hàng khi tạo, là một chuỗi chữ và số và đó là mã định danh duy nhất cho ứng dụng của bạn (chẳng hạn như 0). Bạn không thể sửa đổi Client ID. Bạn sẽ sử dụng Client ID để xác định Ứng dụng Auth0 mà SDK Auth0 React cần kết nốiCảnh báo. Một phần thông tin quan trọng khác có trong "Cài đặt" là Bí mật khách hàng. Bí mật này bảo vệ tài nguyên của bạn bằng cách chỉ cấp mã thông báo cho người yêu cầu nếu họ được ủy quyền. Hãy coi đó là mật khẩu của ứng dụng của bạn, mật khẩu này phải luôn được giữ bí mật. Nếu bất kỳ ai có quyền truy cập vào Bí mật khách hàng của bạn, họ có thể mạo danh ứng dụng của bạn và truy cập các tài nguyên được bảo vệ 🛠 Mở dự án khởi động React, 4 và tạo tệp 2 trong thư mục dự án 9🛠 Điền vào 2 như sau 1🛠 Quay lại trang ứng dụng Auth0 của bạn. Thực hiện theo các bước sau để nhận các giá trị 4 và 5
Các biến này cho phép ứng dụng React của bạn tự nhận mình là bên được ủy quyền để tương tác với máy chủ xác thực Auth0 Bộ kết nối Auth0 và ReactBạn đã hoàn tất thiết lập dịch vụ xác thực mà ứng dụng React của bạn có thể sử dụng. Tất cả những gì còn lại là để bạn tiếp tục xây dựng dự án khởi động trong suốt hướng dẫn này bằng cách triển khai các thành phần để kích hoạt và quản lý quy trình xác thực Vui lòng tìm hiểu sâu hơn về Tài liệu Auth0 để tìm hiểu thêm về cách Auth0 giúp bạn tiết kiệm thời gian triển khai và quản lý danh tính Thiết lập SDK phản ứng Auth0🛠 Bạn cần làm theo các bước sau để tích hợp Auth0 React SDK với ứng dụng React của mình Cài đặt Auth0 React SDK🛠 Thực hiện lệnh sau 8Định cấu hình thành phần Auth0ProviderVề cơ bản, Auth0 React SDK sử dụng React Context. SDK sử dụng thành phần 90 để quản lý trạng thái xác thực của người dùng của bạn. Đổi lại, SDK hiển thị thành phần 91 cung cấp 90 đó cho các thành phần con của nó. Như vậy, bạn có thể bọc thành phần gốc của mình, chẳng hạn như 93, với 91 để tích hợp Auth0 với ứng dụng React của bạn 0Tuy nhiên, xác thực người dùng là một cơ chế để giám sát ai đang truy cập ứng dụng của bạn và kiểm soát những gì họ có thể làm. Ví dụ: bạn có thể ngăn người dùng chưa đăng nhập truy cập vào các phần của ứng dụng của bạn. Trong trường hợp đó, Auth0 có thể đóng vai trò là người trả lại ứng dụng của bạn
Nếu người dùng muốn nhập một tuyến đường được bảo vệ từ ứng dụng của bạn, Auth0 sẽ ngăn họ lại và yêu cầu họ xuất trình thông tin đăng nhập. Nếu Auth0 có thể xác minh họ là ai và họ phải vào đó, Auth0 sẽ cho phép họ vào. Nếu không, Auth0 sẽ đưa chúng trở lại lộ trình ứng dụng công khai Bây giờ, điều quan trọng cần nhắc lại là quy trình xác thực sẽ không xảy ra trong lớp ứng dụng của bạn. Ứng dụng React của bạn sẽ chuyển hướng người dùng của bạn đến trang Đăng nhập toàn cục Auth0, nơi Auth0 yêu cầu thông tin đăng nhập và chuyển hướng người dùng quay lại ứng dụng của bạn với kết quả của quá trình xác thực 91 ghi nhớ nơi người dùng muốn đến và nếu xác thực thành công, nó sẽ đưa người dùng đến tuyến đường đó. Như vậy, 91 cần có quyền truy cập vào lịch sử phiên của ứng dụng. Ứng dụng React khởi động sử dụng React Router để quản lý định tuyến của nó. React Router hiển thị một React Hook giúp bạn dễ dàng truy cập lịch sử phiên thông qua một đối tượng 97, 98Do đó, bạn cần bọc 91 với 10 từ Bộ định tuyến React, sử dụng thành phần 11 dưới mui xe để duy trì trạng thái định tuyến 1Ở đây, những gì bạn thấy khi chơi là trụ cột trong kiến trúc của React. bạn mở rộng các thành phần, không phải thông qua kế thừa mà là thành phần Làm thế nào để bạn tạo một 91 với quyền truy cập vào lịch sử phiên ứng dụng?🛠 Bắt đầu bằng cách tạo một thư mục 13 trong thư mục 14 2🛠 Tạo tệp 15 trong thư mục 16 để xác định thành phần 17, thành phần này sử dụng thành phần để cung cấp React Router Hooks cho 91 3🛠 Điền vào 19 những thông tin sau 4Điều gì đang xảy ra trong 17?
Đó là nó. Gói bất kỳ cây thành phần nào bằng 17 sẽ cấp cho nó quyền truy cập vào 90Bạn sử dụng 17 như thế nào? 17 yêu cầu thành phần 10 từ React Router phải là cha mẹ, ông bà hoặc ông cố của nó 01 từ Bộ định tuyến React phải có trong cây thành phần ở cấp độ cao hơn để 17 truy cập móc 98 từ Bộ định tuyến React🛠 Mở 04 và cập nhật nó như sau để xây dựng cây thành phần phù hợp nhằm cung cấp năng lượng cho các tính năng xác thực người dùng và định tuyến của ứng dụng React của bạn 5🛠 Thực hiện lệnh sau để chạy ứng dụng React của bạn 6Auth0 React SDK đã được thiết lập xong. Bạn đã sẵn sàng triển khai xác thực người dùng trong phần tiếp theo Thêm xác thực người dùngBạn cần cung cấp các phần tử giao diện người dùng để người dùng kích hoạt các sự kiện xác thực. đăng nhập, đăng xuất và đăng ký Tạo nút đăng nhập🛠 Tạo tệp 05 trong thư mục 06 7🛠 Dân cư 07 như vậy 8 08 là một phương pháp được đưa ra bởi 90. Gọi phương thức này sẽ nhắc người dùng xác thực và cung cấp sự đồng ý cho ứng dụng React của bạn thay mặt người dùng đó truy cập vào một số dữ liệu nhất định. Trong kiến trúc hiện tại của bạn, điều này có nghĩa là ứng dụng React của bạn chuyển hướng người dùng đến trang Đăng nhập toàn cục Auth0 để thực hiện quy trình xác thực. Bạn sẽ thấy điều này hoạt động trong các phần tiếp theoBạn có thể chuyển một đối tượng cấu hình tới 08 để tùy chỉnh trải nghiệm đăng nhập. Ví dụ: bạn có thể chuyển các tùy chọn để chuyển hướng người dùng đến trang Đăng nhập toàn cục Auth0 được tối ưu hóa để đăng ký ứng dụng React của bạn. Xem 11 để biết thêm chi tiết về các tùy chọn nàyTạo nút đăng kýBạn có thể khiến người dùng truy cập trực tiếp vào trang đăng ký thay vì trang đăng nhập bằng cách chỉ định thuộc tính 12 trong đối tượng cấu hình của 08 9🛠 Tạo tệp 14 trong thư mục 06 0🛠 Điền vào 16 như vậy để xác định thành phần 17 1Sử dụng tính năng Đăng ký yêu cầu bạn bật Trải nghiệm đăng nhập toàn cục mới Auth0 trong đối tượng thuê của mình 🛠 Mở phần Đăng nhập toàn cục của Bảng điều khiển Auth0 và chọn tùy chọn "Mới" trong phần phụ "Trải nghiệm" 🛠 Cuộn xuống và nhấp vào nút "Lưu thay đổi" Sự khác biệt giữa trải nghiệm người dùng 18 và 17 sẽ rõ ràng hơn khi bạn tích hợp các thành phần đó với ứng dụng React của mình và xem chúng hoạt động. Bạn sẽ làm điều đó trong các phần tiếp theoTạo nút đăng xuất🛠 Tạo tệp 20 trong thư mục 06 2Dân cư 22 như vậy 3Phương thức 23 được hiển thị bởi 90 sẽ xóa phiên ứng dụng và chuyển hướng đến điểm cuối Auth0 25 để xóa phiên Auth0. Cũng như các phương thức đăng nhập, bạn có thể chuyển một đối số đối tượng tới 23 để xác định các tham số cho lệnh gọi 25. Quá trình này khá vô hình đối với người dùng. Xem 28 để biết thêm chi tiếtTại đây, bạn chuyển tùy chọn 29 để chỉ định URL mà Auth0 sẽ chuyển hướng người dùng của bạn sau khi họ đăng xuất. Ngay bây giờ, bạn đang làm việc cục bộ và "URL đăng xuất được phép" của ứng dụng Auth0 của bạn trỏ tới 30Tuy nhiên, nếu bạn muốn triển khai ứng dụng React của mình vào sản xuất, bạn cần thêm URL đăng xuất sản xuất vào danh sách "URL đăng xuất được phép" và đảm bảo rằng Auth0 chuyển hướng người dùng của bạn đến URL sản xuất đó chứ không phải 31. Đặt 29 thành 33 sẽ làm được điều đó
Tích hợp nút đăng nhập và đăng xuấtHãy bọc 18 và 35 thành một thành phần có tên là 36🛠 Tạo tệp 37 trong thư mục 06 4🛠 Nhập mã sau vào 39 5 40 là một giá trị boolean được hiển thị bởi 90. Giá trị của nó là 42 khi Auth0 đã xác thực người dùng và 43 khi chưa xác thựcCó một số lợi thế khi sử dụng trình bao bọc thành phần 36 nàyBạn có thể xây dựng giao diện linh hoạt. 36 đóng vai trò là công tắc "đăng nhập/đăng xuất" mà bạn có thể đặt ở bất cứ đâu bạn cần chức năng chuyển đổi đó. Tuy nhiên, bạn vẫn có các thành phần 18 và 35 riêng biệt cho các trường hợp khi bạn cần chức năng của chúng một cách riêng biệt. Ví dụ: bạn có thể có một 35 trên một trang mà chỉ những người dùng được xác thực mới có thể nhìn thấyBạn có thể xây dựng các giao diện mở rộng. Bạn có thể dễ dàng hoán đổi thành phần 18 với thành phần 17 trong 36 để tạo công tắc "đăng ký/đăng xuất". Bạn cũng có thể gói công tắc "đăng ký/đăng xuất" trong thành phần 52Bạn có thể xây dựng giao diện khai báo. Ví dụ: sử dụng 36, bạn có thể thêm chức năng đăng nhập và đăng xuất vào thành phần 54 của mình mà không cần suy nghĩ về chi tiết triển khai về cách thức hoạt động của công tắc xác thực🛠 Với ý nghĩ đó, hãy tạo một tệp 55 trong thư mục 06 6🛠 Dân cư 57 như vậy 7🛠 Cuối cùng, mở 58 trong thư mục 06 và cập nhật nó như vậy 8Bằng cách có các loại thành phần con thanh điều hướng khác nhau, bạn có thể mở rộng từng loại khi cần mà không cần mở lại và sửa đổi thành phần chính 54🛠 Hãy tiếp tục và thử đăng nhập. Ứng dụng React của bạn chuyển hướng bạn đến trang Đăng nhập toàn cục Auth0. Bạn có thể sử dụng biểu mẫu để đăng nhập bằng tên người dùng và mật khẩu hoặc nhà cung cấp danh tính xã hội như Google. Lưu ý rằng trang đăng nhập này cũng cung cấp cho bạn tùy chọn để đăng ký Thí nghiệm. Sử dụng thành phần 17Hoán đổi thành phần 18 với thành phần 17 trong hoạt động bậc ba được xác định trong phần thân của thành phần 36Khi bạn nhấp vào nút "Đăng ký", bạn sẽ đến một trang có ngôn ngữ được tối ưu hóa để khuyến khích bạn đăng ký ứng dụng React của mình Thử thứ này đi Khi bạn hoàn thành thử nghiệm này, hãy đổi lại 17 với 18 để tiếp tục với phần còn lại của hướng dẫn này
Lưu ý rằng khi bạn đăng nhập xong và Auth0 chuyển hướng bạn đến ứng dụng React của bạn, nút đăng nhập sẽ hiển thị nhanh (màu xanh lam) và sau đó nút đăng xuất hiển thị (màu đỏ) Giao diện người dùng nhấp nháy vì ứng dụng React của bạn không biết Auth0 đã xác thực người dùng chưa. Ứng dụng của bạn sẽ biết trạng thái xác thực người dùng sau khi tải Auth0 React SDK 🛠 Để khắc phục lỗi nhấp nháy giao diện người dùng đó, hãy sử dụng giá trị boolean 67 do 90 hiển thị để hiển thị thành phần 93 sau khi SDK Auth0 React tải xong🛠 Mở 70 và cập nhật nó như sau 9Trong khi SDK đang tải, thành phần 71, có hoạt ảnh thú vị, hiển thịTruy xuất thông tin người dùngSau khi người dùng đăng nhập thành công, Auth0 sẽ gửi mã thông báo ID đến ứng dụng React của bạn. Các hệ thống xác thực, chẳng hạn như Auth0, sử dụng Mã thông báo ID trong xác thực dựa trên mã thông báo để lưu trữ thông tin hồ sơ người dùng và cung cấp thông tin đó cho ứng dụng khách. Bộ nhớ đệm của mã thông báo ID có thể góp phần cải thiện hiệu suất và khả năng phản hồi cho ứng dụng React của bạn Bạn có thể sử dụng dữ liệu từ mã thông báo ID để cá nhân hóa giao diện người dùng của ứng dụng React của mình. Auth0 React SDK giải mã mã thông báo ID và lưu trữ dữ liệu của nó trong đối tượng 72 được hiển thị bởi 90. Một số thông tin mã thông báo ID bao gồm tên, biệt hiệu, ảnh và email của người dùng đã đăng nhậpLàm cách nào bạn có thể sử dụng mã thông báo ID để tạo trang hồ sơ cho người dùng của mình? 🛠 Cập nhật thành phần 74 trong 75 như sau 0Điều gì đang xảy ra trong thành phần 74?
Thành phần 74 hiển thị thông tin người dùng mà bạn có thể coi là được bảo vệ. Ngoài ra, thuộc tính 72 là 83 nếu không có người dùng đăng nhập. Vì vậy, dù bằng cách nào, thành phần này chỉ hiển thị nếu Auth0 đã xác thực người dùngNhư vậy, bạn nên bảo vệ tuyến đường hiển thị thành phần này, 84. Bạn sẽ học cách làm điều đó trong phần tiếp theoBảo vệ tuyến đườngAuth0 React SDK hiển thị Thành phần bậc cao hơn (HOC) 85 mà bạn có thể sử dụng để bảo vệ các tuyến đường. Bạn cũng có thể sử dụng 85 để tạo thành phần 87 để bảo vệ các tuyến theo cách khai báo hơn bằng React RouterSử dụng Thành phần bậc cao hơn để bảo vệ tuyến đường🛠 Mở 75 và cập nhật như sau 1Khi bạn bọc các thành phần của mình trong Thành phần có thứ tự cao hơn 85 và người dùng chưa đăng nhập truy cập trang hiển thị thành phần đó, ứng dụng React của bạn sẽ chuyển hướng người dùng đó đến trang đăng nhập. Sau khi người dùng đăng nhập, Auth0 sẽ chuyển hướng người dùng đến ứng dụng React của bạn và 91 sẽ đưa người dùng đến trang họ dự định truy cập trước khi đăng nhập 85 lấy các đối số sau
Trong ví dụ trên, những người dùng chưa đăng nhập sẽ thấy thành phần 71 ngay khi họ đến tuyến đường 98 2Thành phần 96 cải thiện trải nghiệm người dùng bằng cách tránh mọi nhấp nháy của các thành phần giao diện người dùng hỗn hợp (các thành phần được bảo vệ và công khai)🛠 Hãy thử cái này. Đăng xuất và truy cập 84. Ứng dụng React của bạn sẽ chuyển hướng bạn đến trang Đăng nhập toàn cục Auth0Nếu bạn đang sử dụng React Router thì sao? Sử dụng 85 để bọc thành phần trực tiếp không phải là cách khai báo nhất để xây dựng ứng dụng React. Nếu bạn nhìn vào các route được xác định trong thành phần 93, bạn sẽ không thể biết route nào được bảo vệ và route nào là public 3🛠 Thay vì sử dụng trực tiếp 85, bạn có thể bọc nó trong một thành phần 87 để tận dụng các tính năng của React RouterTạo một thành phần để bảo vệ đường dẫn React Router
Trong phần này, bạn sẽ tạo một thành phần 87 sử dụng thành phần 06 từ React Router để hiển thị Thành phần bậc cao hơn 85. Ưu điểm của phương pháp này là 87 của bạn sẽ có cùng API với thành phần 06 sẵn dùng. Như vậy, bạn có thể soạn 87 với các thành phần React Router khác một cách hữu cơ🛠 Để bắt đầu, hãy tạo tệp 11 trong thư mục 16 4🛠 Điền vào 13 như sau 5🛠 Cuối cùng, mở tệp 70. Xác định vị trí thành phần 15 và thay đổi thành phần 06 cho đường dẫn 98 và 18 thành thành phần 87 6Bạn không cần sử dụng trực tiếp 85 HOC trong thành phần 74 nữa🛠 Mở 75 và hoàn nguyên tệp về nội dung trước đó 0🛠 Bây giờ bạn có thể kiểm tra xem hai đường dẫn này có yêu cầu người dùng đăng nhập trước khi họ có thể truy cập chúng không. Đăng xuất và thử truy cập trang Hồ sơ hoặc API bên ngoài. Nếu nó hoạt động, React sẽ chuyển hướng bạn đăng nhập bằng Auth0 Bộ bảo vệ phía máy khách cải thiện trải nghiệm người dùng cho ứng dụng React của bạn chứ không phải tính bảo mật của nóTrong Security StackExchange, Conor Mancone giải thích rằng các bộ bảo vệ phía máy chủ là để bảo vệ dữ liệu trong khi các bộ bảo vệ phía máy khách là để cải thiện trải nghiệm người dùng Những điểm chính từ phản ứng của anh ấy là
Gọi một APIPhần này tập trung vào việc chỉ cho bạn cách nhận mã thông báo truy cập trong ứng dụng React của bạn và cách sử dụng nó để thực hiện lệnh gọi API đến các điểm cuối API được bảo vệ Khi bạn sử dụng Auth0, bạn ủy thác quá trình xác thực cho một dịch vụ tập trung. Auth0 cung cấp cho bạn chức năng đăng nhập và đăng xuất người dùng khỏi ứng dụng React của bạn. Tuy nhiên, ứng dụng của bạn có thể cần truy cập các tài nguyên được bảo vệ từ API Bạn cũng có thể bảo vệ API bằng Auth0. Có nhiều khởi động nhanh API để giúp bạn tích hợp Auth0 với nền tảng phụ trợ của mình Khi bạn sử dụng Auth0 để bảo vệ API của mình, bạn cũng ủy thác quy trình ủy quyền cho một dịch vụ tập trung để đảm bảo chỉ những ứng dụng khách được phê duyệt mới có thể thay mặt người dùng truy cập các tài nguyên được bảo vệ Làm cách nào bạn có thể thực hiện lệnh gọi API an toàn từ React? Ứng dụng React của bạn xác thực người dùng và nhận mã thông báo truy cập từ Auth0. Sau đó, ứng dụng có thể chuyển mã thông báo truy cập đó tới API của bạn dưới dạng thông tin xác thực. Đổi lại, API của bạn có thể sử dụng các thư viện Auth0 để xác minh mã thông báo truy cập mà nó nhận được từ ứng dụng gọi điện và đưa ra phản hồi với dữ liệu mong muốn Thay vì tạo API từ đầu để kiểm tra luồng xác thực và ủy quyền giữa máy khách và máy chủ, bạn sẽ sử dụng API Express demo mà tôi đã chuẩn bị cho bạn Nhận bản trình diễn API Express🛠 Mở một cửa sổ terminal mới và sao chép kho lưu trữ 25 vào một nơi nào đó trong hệ thống của bạn. Đảm bảo rằng bạn sao chép nó bên ngoài thư mục dự án React của bạn 8🛠 Sau khi bạn sao chép repo này, hãy đặt thư mục 25 làm thư mục hiện tại của bạn 9🛠 Cài đặt nút. phụ thuộc dự án js ________số 8Kết nối API Express với Auth0Tạo cầu nối giao tiếp giữa Express và Auth0Quá trình này tương tự như cách bạn kết nối React với Auth0 🛠 Chuyển đến phần API trong Bảng điều khiển Auth0 và nhấp vào nút "Tạo API" 🛠 Sau đó, ở dạng mà Auth0 hiển thị
1
2
Số nhận dạng là các chuỗi duy nhất giúp Auth0 phân biệt giữa các API khác nhau của bạn. Chúng tôi khuyên bạn nên sử dụng URL để tạo điều kiện thuận lợi cho việc tạo số nhận dạng duy nhất có thể dự đoán được; 🛠 Với những giá trị này, hãy nhấn nút "Tạo". Giữ trang này mở vì bạn sẽ cần một số giá trị của nó trong phần tiếp theo Thêm các biến cấu hình Auth0 vào Express🛠 Tạo tệp 2 cho Máy chủ API trong thư mục 25 9🛠 Điền vào tệp 30 này như sau 4🛠 Quay lại trang API Auth0 của bạn và làm theo các bước sau để nhận Đối tượng Auth0
Bây giờ, hãy làm theo các bước sau để nhận giá trị Tên miền Auth0
🛠 Với các giá trị cấu hình 2 đã đặt, hãy chạy máy chủ API bằng cách đưa ra lệnh sau 6Cấu hình React để kết nối với Express API🛠 Quay trở lại thư mục dự án 4 lưu trữ ứng dụng React của bạn🛠 Xác định vị trí tệp 47 và thêm các giá trị URL Máy chủ và Đối tượng Auth0 của bạn vào đó 6🛠 Giá trị của 48 giống như 31 từ 30Tại sao tất cả các biến trong tệp React 2 bắt đầu bằng 52? 3 yêu cầu bạn tạo các biến môi trường tùy chỉnh bắt đầu bằng 52 khi sử dụng tệp 2. 3 sẽ bỏ qua bất kỳ biến nào khác ngoại trừ 57Tiền tố 52 giảm thiểu nguy cơ vô tình để lộ khóa riêng từ máy của bạn, khóa này có thể trùng tên với một biến từ tệp 2Ứng dụng React của bạn cần chuyển mã thông báo truy cập khi nó gọi API mục tiêu để truy cập các tài nguyên được bảo vệ. Bạn có thể yêu cầu mã thông báo truy cập ở định dạng mà API có thể xác minh bằng cách chuyển đối tượng và phạm vi đạo cụ tới 91Bất kỳ thay đổi nào bạn thực hiện đối với các biến môi trường React đều yêu cầu bạn khởi động lại máy chủ phát triển nếu nó đang chạy 🛠 Khởi động lại ứng dụng React của bạn để nó có thể sử dụng các giá trị mới mà bạn đã đặt trong 47🛠 Cập nhật tệp 15 trong thư mục 63 để thêm giá trị 64 7Tại sao giá trị Đối tượng Auth0 giống nhau cho cả hai ứng dụng? . Nó giống như một số điện thoại. Bạn muốn đảm bảo rằng ứng dụng React của bạn "gửi đúng API" Các hành động mà ứng dụng React của bạn có thể thực hiện trên API tùy thuộc vào phạm vi mà mã thông báo truy cập của bạn chứa, mà bạn xác định là giá trị của props 66 trong 91Hãy nhớ rằng màn hình mà bạn đã thấy khi đăng nhập lần đầu bằng Auth0 yêu cầu bạn cho phép truy cập thông tin hồ sơ của mình? . Bạn có thể đã thấy điều gì đó tương tự khi chia sẻ danh bạ hoặc ảnh của mình từ nền tảng truyền thông xã hội với ứng dụng của bên thứ ba Khi bạn không chuyển một prop 66 cho 91 như trong ví dụ trên, SDK React sẽ mặc định là OpenID Connect Scopes. 70
Chi tiết về Phạm vi kết nối OpenID đi vào Mã thông báo ID. Tuy nhiên, bạn có thể xác định phạm vi API tùy chỉnh để triển khai kiểm soát truy cập. Bạn sẽ xác định các phạm vi tùy chỉnh đó trong các cuộc gọi mà ứng dụng khách của bạn thực hiện với API đó. Auth0 bao gồm các phạm vi API trong mã thông báo truy cập dưới dạng giá trị xác nhận quyền sở hữu 66
🛠 Cập nhật 80 như sau 8Điều gì đang xảy ra trong thành phần 81?
Yêu cầu đăng nhập trước đó của bạn không bao gồm thông số đối tượng. Như vậy, React SDK không có mã thông báo truy cập được lưu trữ trong bộ nhớ Bạn không nên lưu trữ mã thông báo trong 86. Tại sao?Lưu trữ mã thông báo trong bộ nhớ cục bộ của trình duyệt mang lại sự bền bỉ trong các lần làm mới trang và tab trình duyệt, tuy nhiên, nếu kẻ tấn công có thể chạy JavaScript trong Ứng dụng một trang (SPA) bằng cách sử dụng tấn công tập lệnh chéo trang (XSS), thì chúng có thể truy xuất mã thông báo được lưu trữ trong bộ nhớ cục bộ. Lỗ hổng dẫn đến một cuộc tấn công XSS thành công có thể nằm trong mã nguồn SPA hoặc trong bất kỳ mã JavaScript của bên thứ ba nào có trong SPA, chẳng hạn như Bootstrap, jQuery hoặc Google Analytics 🛠 Đăng xuất và đăng nhập lại để nhận mã thông báo truy cập mới từ Auth0 bao gồm thông tin đối tượng 🛠 Truy cập 87 và nhấp vào bất kỳ nút nào trên trang API bên ngoài để kiểm tra phản hồiNhận tin nhắn công khai 9Nhận tin nhắn được bảo vệ 0Phần kết luậnBạn đã triển khai xác thực người dùng trong React để xác định người dùng của mình, lấy thông tin hồ sơ người dùng và kiểm soát nội dung mà người dùng của bạn có thể truy cập bằng cách bảo vệ các tuyến đường và tài nguyên API Hướng dẫn này đề cập đến trường hợp sử dụng xác thực phổ biến nhất cho ứng dụng React. đăng nhập và đăng xuất đơn giản. Tuy nhiên, Auth0 là một nền tảng có thể mở rộng và linh hoạt có thể giúp bạn đạt được nhiều hơn nữa. Nếu bạn có trường hợp sử dụng phức tạp hơn, hãy xem Kịch bản kiến trúc Auth0 để tìm hiểu thêm về các kịch bản kiến trúc điển hình mà chúng tôi đã xác định khi làm việc với khách hàng về triển khai Auth0 Trong hướng dẫn tiếp theo, chúng tôi sẽ đề cập đến các mẫu và công cụ xác thực nâng cao, chẳng hạn như sử dụng cửa sổ bật lên thay vì chuyển hướng để người dùng đăng nhập, thêm quyền vào mã thông báo ID, sử dụng siêu dữ liệu để cải thiện hồ sơ người dùng và hơn thế nữa Hãy cho tôi biết trong phần bình luận bên dưới suy nghĩ của bạn về hướng dẫn này. Cảm ơn bạn đã đọc và theo dõi, xin vui lòng |