Chủ đề của PRN232 - Xây dựng ứng dụng back-end đa nền tảng với .NET

PRN232 Chương 6 - Bảo mật RESTful Web Service với JWT và Identity

Chương 6 môn PRN232 bàn về bảo mật dịch vụ REST: phân biệt xác thực (bạn là ai) với phân quyền (bạn được làm gì), ASP.NET Core Identity như hệ thống thành viên lo băm mật khẩu và quản lý vai trò, mở rộng IdentityUser bằng lớp kế thừa, JSON Web Token với ba phần Header - Payload - Signature, middleware UseAuthentication và UseAuthorization, header Authorization mang Bearer token, thuộc tính Authorize theo Roles, cùng lý do bắt buộc dùng HTTPS. Trọn bộ câu hỏi trắc nghiệm có giải thích.

Xem danh sách câu hỏi13 câu hỏi92% có giải thích

Bắt đầu bằng Chế độ học nếu bạn muốn đáp án và giải thích hiện ngay sau mỗi câu — không bấm giờ, dừng lúc nào cũng được. Chọn Thi thử khi muốn biết mình đang ở đâu: có bấm giờ, chấm điểm ở cuối, và giải thích chỉ mở sau khi nộp.

Học ngân hàng câu hỏi của chủ đề

Luyện tập theo chủ đề này

13Câu hỏi hiện có

Câu hỏi của chủ đề

13/13 câuHết danh sách
AHeader, Payload, Signature
BPayload, Header, Signature
CSignature, Header, Payload
DHeader, Signature, Body
Lời giải
Một JWT (JSON Web Token) được cấu tạo bởi ba phần được ngăn cách bởi dấu chấm (.). Để xác định thứ tự chính xác của các phần này, chúng ta cần hiểu rõ về chức năng của từng phần. Phần đầu tiên là Header, chứa thông tin về thuật toán được sử dụng để tạo chữ ký và loại token. Phần thứ hai là Payload, chứa dữ liệu thực tế được truyền tải trong token, bao gồm thông tin về người dùng, quyền truy cập, v.v. Phần thứ ba là Signature, chứa chữ ký được tạo bằng cách sử dụng Header và Payload. Chữ ký này giúp xác minh tính toàn vẹn và tính xác thực của token. Vì vậy, thứ tự chính xác của các phần trong một JWT là Header, Payload, Signature.
Mở trang câu hỏi này →
AYes, because the user has one of the required roles.
BNo, because the user must have both the "Editor" and "Admin" roles.
CYes, because the comma indicates an OR relationship.
DIt depends on which role was assigned first.
Lời giải
Khi một người dùng có nhiều vai trò, chẳng hạn như "Biên tập viên" và "Tác giả", và một hành động được trang trí với [Authorize(Roles = "Biên tập viên,Admin")]. Người dùng có được truy cập không?
Mở trang câu hỏi này →
ABy modifying the IdentityUser source code directly.
BBy creating a new class that inherits from IdentityUser and adding the new properties to it.
CBy storing the extra data in a separate, manually-managed table.
DIt is not possible to extend the IdentityUser model.
Lời giải
Để thêm thuộc tính tùy chỉnh (ví dụ: FirstName, DateOfBirth) vào mô hình người dùng trong ASP.NET Core Identity, bạn có thể tạo một lớp mới kế thừa từ IdentityUser và thêm các thuộc tính mới vào đó. Điều này cho phép bạn mở rộng mô hình người dùng mà không cần phải sửa đổi mã nguồn của IdentityUser trực tiếp. Khi tạo lớp mới, bạn cần đảm bảo rằng lớp này có cùng tên với lớp IdentityUser và có cùng thuộc tính khóa chính (ví dụ: Id). Sau đó, bạn có thể thêm các thuộc tính mới vào lớp này, chẳng hạn như FirstName và DateOfBirth. Lớp mới này sẽ được sử dụng thay thế cho lớp IdentityUser trong mô hình người dùng của bạn.
Mở trang câu hỏi này →
A[RequiresRole("Administrator")]
B[Authorize(Role = "Administrator")]
C[Authorize(Roles = "Administrator")]
D[Authorize(UserRole = "Administrator")]
Lời giải
Để hạn chế truy cập vào một hành động controller chỉ cho người dùng có vai trò "Administrator", bạn có thể sử dụng một trong các cách sau. Cách 1: Sử dụng [Authorize(Roles = "Administrator")] - Đây là cách phổ biến và được sử dụng rộng rãi trong các ứng dụng ASP.NET. Cách 2: Sử dụng [RequiresRole("Administrator")] - Đây là cách khác để hạn chế truy cập vào một hành động controller. Cách 3: Sử dụng [Authorize(UserRole = "Administrator")] - Đây là cách khác để hạn chế truy cập vào một hành động controller, mặc dù cách này không được sử dụng rộng rãi như cách 1. Cách 4: Sử dụng [Authorize(Role = "Administrator")] - Đây là cách khác để hạn chế truy cập vào một hành động controller, mặc dù cách này không được sử dụng rộng rãi như cách 1.
Mở trang câu hỏi này →
AIn the appsettings.json file.
BIn the launchSettings.json file.
CIn the Program.cs file, using builder.Services.
DWithin a controller's constructor.
Mở trang câu hỏi này →
AUseAuthorization()
BUseAuthentication()
CUseCors()
DUseStaticFiles()
Lời giải
Trong ASP.NET Core, middleware được sử dụng để xác thực và xử lý token JWT là UseAuthentication(). Middleware này cho phép bạn xác thực người dùng bằng cách kiểm tra token JWT được gửi kèm trong yêu cầu HTTP. Nếu token hợp lệ, người dùng sẽ được xác thực và có thể truy cập vào các tài nguyên được bảo vệ. UseAuthentication() cũng cho phép bạn cấu hình các tùy chọn xác thực, chẳng hạn như cách xử lý token hết hạn hoặc bị hỏng.
Mở trang câu hỏi này →
Đề bài
app.UseAuthentication();
app.UseAuthorization();

// ...

Đề bài
app.Run();
AIt registers the authentication services.
BIt adds the authentication and authorization middleware components to the request pipeline.
CIt configures the default authentication scheme.
DIt is redundant and has no effect.
Lời giải

Trong mã .NET 8 ở Program.cs, mục đích của đoạn mã var app = builder.Build(); // ...

Lời giải
app.UseAuthentication();
app.UseAuthorization();

// ... app.Run(); là thêm các thành phần middleware cho pipeline yêu cầu. Middleware là các lớp xử lý trung gian giúp thực hiện các tác vụ như xác thực và ủy quyền. Khi sử dụng UseAuthentication() và UseAuthorization(), chúng ta đang thêm các thành phần này vào pipeline để xử lý các yêu cầu liên quan đến xác thực và ủy quyền. Điều này giúp đảm bảo rằng ứng dụng của chúng ta có thể xác thực và ủy quyền người dùng một cách chính xác và an toàn.

Mở trang câu hỏi này →
8What is ASP.NET Core Identity?4 lựa chọnDễ100% trả lời đúng
AA simple interface for generating unique IDs.
BA membership system that provides services for user authentication and authorization, including user management, password hashing, and role management.
CA client-side library for managing user profiles.
DThe default authentication scheme for Windows Authentication.
Lời giải
ASP.NET Core Identity là một hệ thống quản lý thành viên cung cấp các dịch vụ cho việc xác thực và ủy quyền người dùng, bao gồm quản lý người dùng, mã hóa mật khẩu và quản lý vai trò. Nó cho phép bạn tạo và quản lý người dùng, xác thực người dùng và phân quyền truy cập vào các tài nguyên. ASP.NET Core Identity cũng cung cấp các tính năng như mã hóa mật khẩu, xác thực hai yếu tố và quản lý vai trò.
Mở trang câu hỏi này →
AAccept
BAuthorization
CContent-Type
DCache-Control
Lời giải
Để gửi một token JWT đến một Web API, bạn cần sử dụng HTTP header phù hợp. Trong các lựa chọn đã cho, 'Authorization' là lựa chọn đúng. 'Authorization' là HTTP header được sử dụng để xác thực và cấp quyền truy cập vào các nguồn tài nguyên trên Internet. Khi bạn gửi một yêu cầu đến một Web API, bạn có thể thêm 'Authorization' vào HTTP header của yêu cầu và cung cấp token JWT của mình. Điều này cho phép Web API xác thực và xác minh tính hợp lệ của token JWT và cấp quyền truy cập vào các nguồn tài nguyên cần thiết.
Mở trang câu hỏi này →
AInclude passwords in URLs
BValidate inputs on the server
CAllow GET to delete data
DReturn detailed stack traces to clients
Lời giải
Một số phương thức bảo mật được khuyến nghị cho RESTful APIs là gì? Để đảm bảo an toàn cho các API RESTful, chúng ta cần tuân thủ một số nguyên tắc bảo mật quan trọng. Trong số các lựa chọn trên, phương thức "Validate inputs on the server" (Xác minh đầu vào trên máy chủ) là một trong những phương thức được khuyến nghị. Điều này có nghĩa là máy chủ phải xác minh và kiểm tra các dữ liệu đầu vào từ khách hàng trước khi xử lý chúng. Điều này giúp ngăn chặn các cuộc tấn công như SQL injection và cross-site scripting (XSS). Ngoài ra, phương thức này cũng giúp bảo vệ dữ liệu nhạy cảm của khách hàng khỏi bị truy cập trái phép. Các phương thức khác như "Include passwords in URLs" (Bao gồm mật khẩu trong URL), "Allow GET to delete data" (Cho phép GET xóa dữ liệu) và "Return detailed stack traces to clients" (Trả lại các thông tin lỗi chi tiết cho khách hàng) đều không được khuyến nghị vì chúng có thể gây ra các rủi ro bảo mật nghiêm trọng.
Mở trang câu hỏi này →
AThe server should store the client's session state to validate every request.
BEach request from a client must contain all the information needed for the server to authenticate and authorize it, without relying on a previous request's context.
CSecurity is best handled by the client-side application, not the API.
DUsing HTTP instead of HTTPS is acceptable for internal services.
Lời giải
Một trong những nguyên tắc bảo mật cơ bản cho các dịch vụ RESTful không có trạng thái là mỗi yêu cầu từ phía khách hàng phải chứa tất cả thông tin cần thiết để máy chủ xác thực và cấp quyền cho nó mà không dựa trên bối cảnh của yêu cầu trước đó. Điều này có nghĩa là mỗi yêu cầu phải tự chứa thông tin xác thực và cấp quyền của mình, mà không dựa vào thông tin được lưu trữ trên máy chủ. Điều này giúp tăng cường bảo mật và giảm thiểu rủi ro do lỗi bảo mật của máy chủ. Ngoài ra, nguyên tắc này cũng giúp cải thiện khả năng mở rộng và tínhscalability của hệ thống, vì máy chủ không cần phải lưu trữ trạng thái của khách hàng.
Mở trang câu hỏi này →
12Which of the following questions does "Authentication" answer?4 lựa chọnDễ100% trả lời đúng
A"What can you do?"
B"Who are you?"
C"How long can you stay?"
D"Where are you from?"
Lời giải
Authentication là quá trình xác thực danh tính của một người dùng. Nó giúp xác định xem người dùng đó có phải là người thực sự hay không. Trong các câu hỏi được liệt kê, câu hỏi "Who are you?" (Ai bạn là?) là một câu hỏi phù hợp để xác thực danh tính của người dùng. Câu hỏi này giúp xác định xem người dùng có phải là người thực sự hay không, và có thể được sử dụng để xác thực thông tin đăng nhập của người dùng.
Mở trang câu hỏi này →
AIt makes the API faster by compressing the data.
BIt ensures that the data (including credentials and sensitive information) transferred between the client and server is encrypted and protected from eavesdropping.
CIt is the only protocol that supports the GET and POST verbs.
DIt automatically handles user authorization.
Lời giải
Sử dụng HTTPS cho RESTful APIs là rất quan trọng vì nó đảm bảo rằng dữ liệu được truyền giữa client và server được mã hóa và bảo vệ khỏi việc nghe trộm. Điều này đặc biệt quan trọng khi truyền dữ liệu nhạy cảm như thông tin đăng nhập, mật khẩu, hoặc thông tin cá nhân. Nếu dữ liệu không được mã hóa, bất kỳ ai cũng có thể truy cập và đọc dữ liệu này, điều này có thể dẫn đến các vấn đề bảo mật nghiêm trọng. Ngoài ra, HTTPS cũng giúp ngăn chặn các cuộc tấn công như eavesdropping, tampering và replay attacks. Vì vậy, sử dụng HTTPS cho RESTful APIs là một biện pháp bảo mật quan trọng để bảo vệ dữ liệu và ngăn chặn các cuộc tấn công.
Mở trang câu hỏi này →

Đề có câu hỏi của chủ đề này

3 đề chứa ít nhất một câu thuộc chủ đề — mở đề để làm cả bộ, không chỉ từng câu.