536
Chương 13: Bảo mật
WindowsPrincipal
. Cuối cùng, gọi phương thức
IsInRole
của đối tượng
WindowsPrincipal
để xác định người dùng này có nằm trong một nhóm Windows
nào đó hay không.
Cơ chế RBS của .NET Framework trừu tượng hóa các tính năng bảo mật dựa-trên-người-dùng
của hệ điều hành nằm dưới thông qua hai giao diện chính sau đây:
•
System.Security.Principal.IIdentity
•
System.Security.Principal.IPrincipal
Giao diện
IIdentity
mô tả thực thể mà mã lệnh hiện đang chạy trên danh nghĩa của thực thể
này, chẳng hạn một người dùng hoặc tài khoản dịch vụ (service account). Giao diện
IPrincipal
mô tả
IIdentity
của thực thể và tập các vai trò mà thực thể này thuộc về. Một vai
trò chỉ là một sự phân loại, dùng để nhóm các thực thể với các khả năng bảo mật tương tự
nhau, chẳng hạn một nhóm người dùng Windows.
Để tích hợp RBS với bảo mật người dùng Windows, .NET Framework cung cấp hai lớp sau
đây (hiện thực giao diện
IIdentity
và
IPrincipal
):
•
System.Security.Principal.WindowsIdentity
•
System.Security.Principal.WindowsPrincipal
Lớp
WindowsIdentity
hiện thực giao diện
IIdentity
và mô tả một người dùng Windows. Lớp
WindowsPrincipal
hiện thực
IPrincipal
và mô tả tập các nhóm Windows mà người dùng này
thuộc về. Vì .NET RBS là một giải pháp chung được thiết kế sao cho độc lập nền, bạn không
thể truy xuất các tính năng và các khả năng của tài khoản người dùng Windows thông qua giao
diện
IIdentity
và
IPrincipal
, bạn phải sử dụng trực tiếp các đối tượng
WindowsIdentity
và
WindowsPrincipal
.
Để xác định người dùng hiện hành có phải là thành viên của một nhóm Windows nào đó hay
không, trước tiên bạn phải gọi phương thức tĩnh
WindowsIdentity.GetCurrent
. Phương thức
này trả về một đối tượng
WindowsIdentity
mô tả người dùng Windows mà tiểu trình hiện đang
chạy trên danh nghĩa của người dùng này. Kế tiếp, tạo một đối tượng
WindowsPrincipal
mới
và truyền đối tượng
WindowsIdentity
cho phương thức khởi dựng. Cuối cùng, gọi phương
thức
IsInRole
của đối tượng
WindowsPrincipal
để kiểm tra xem người dùng này có nằm trong
một nhóm (vai trò) cụ thể nào đó hay không.
IsInRole
trả về
true
nếu người dùng này là
thành viên của nhóm đã được chỉ định, ngược lại trả về
false
.
Bạn có thể thu lấy tham chiếu
IPrincipal
đến một đối tượng
WindowsPrincipal
bằng thuộc tính tĩnh
CurrentPrincipal
của lớp
System.Threading.Thread
. Tuy
nhiên, kỹ thuật này tùy thuộc vào cấu hình chính sách principal của miền ứng
dụng hiện hành; mục 13.14 sẽ thảo luận vấn đề này chi tiết hơn.
Phương thức
IsInRole
có ba phiên bản nạp chồng:
•
Phiên bản thứ nhất nhận một chuỗi chứa tên của nhóm cần kiểm tra. Tên nhóm phải có
dạng
[DomainName]\[GroupName]
đối với các nhóm dựa-trên-miền và phải có dạng
[MachineName]\[GroupName]
đối với các nhóm được định nghĩa cục bộ. Nếu muốn kiểm