541
Chương 13: Bảo mật
Thread.CurrentPrincipal
. Việc này sẽ ngăn bộ thực thi gán các đối tượng
IPrincipal
mặc định hoặc tạo ra các đối tượng mới dựa trên chính sách principal.
Bảng 13.4 Các thành viên thuộc kiểu liệt kê PrincipalPolicy
Tên thành viên
Mô tả
NoPrincipal
Không có đối tượng
IPrincipal
nào được tạo ra,
Thread.CurrentPrincipal
trả về một tham chiếu
null
.
UnauthenticatedPrincipal
Một đối tượng
System.Security.Principal.
GenericPrincipal
rỗng được tạo ra và được gán
cho
Thread.CurrentPrincipal
.
WindowsPrincipal
Một đối tượng
WindowsPrincipal
(mô tả người
dùng Windows đã đăng nhập) được tạo ra và
được gán cho
Thread.CurrentPrincipal
.
Bất kể sử dụng phương pháp nào để thiết lập
IPrincipal
cho tiểu trình hiện hành, bạn cũng
phải làm như thế trước khi sử dụng các yêu cầu bảo mật RBS, nếu không thông tin về người
dùng (
IPrincipal
) sẽ không có hiệu lực để bộ thực thi có thể xử lý yêu cầu. Bình thường, khi
chạy trên nền Windows, bạn thiết lập chính sách principal của một miền ứng dụng là
PrincipalPolicy.WindowsPrincipal
để thu lấy thông tin về người dùng Windows:
// Thu lấy một tham chiếu đến miền ứng dụng hiện hành.
AppDomain appDomain = System.AppDomain.CurrentDomain;
// Cấu hình miền ứng dụng hiện hành sao cho sử dụng các
// principal dựa-trên-Windows.
appDomain.SetPrincipalPolicy(
System.Security.Principal.PrincipalPolicy.WindowsPrincipal);
File RoleBasedSecurityExample.cs (trong đĩa CD đính kèm) minh họa cách sử dụng các yêu
cầu RBS bắt buộc và khai báo. Phần thứ nhất trình bày ba phương thức được bảo vệ bằng các
yêu cầu RBS bắt buộc. Nếu đối tượng
Thread.CurrentPrincipal
không thỏa các đòi hỏi về tên
người dùng và tư cách thành viên, yêu cầu sẽ ném ngoại lệ
SecurityException
.
public static void ProtectedMethod1() {
// Một yêu cầu bảo mật bắt buộc dựa-trên-vai-trò: principal
// hiện hành mô tả một định danh với tên là "nnbphuong81",
// các vai trò của principal là không quan trọng.
System.Security.Permissions.PrincipalPermission perm =
new System.Security.Permissions.PrincipalPermission
(@"MACHINE\nnbphuong81", null);
perm.Demand();