CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 540

540
Chương 13: Bảo mật

xem các yêu cầu RBS khai báo bằng công cụ Permview.exe (đã được thảo luận trong mục
13.6). Cho dù hiện thực yêu cầu RBS bắt buộc hay khai báo, bạn cũng phải chắc rằng bộ thực
thi có thể truy xuất tên và các vai trò của người dùng hiện hành để đánh giá yêu cầu một cách
phù hợp.
Lớp

System.Threading.Thread

mô tả một tiểu trình của hệ điều hành (chạy mã lệnh được-

quản-lý). Thuộc tính tĩnh

CurrentPrincipal

của lớp

Thread

chứa một thể hiện

IPrincipal

mô tả người dùng mà tiểu trình hiện đang chạy trên danh nghĩa của người này. Ở mức hệ điều
hành, mỗi tiểu trình cũng có một Windows access token kết giao—mô tả tài khoản Windows
mà tiểu trình hiện đang chạy trên danh nghĩa của tài khoản này. Bạn cần hiểu rằng thể hiện

IPrincipal

Windows access token là hai thực thể riêng biệt. Windows sử dụng access

token để thực hiện cơ chế bảo mật hệ điều hành, trong khi bộ thực thi .NET sử dụng thể hiện

IPrincipal

để đánh giá các yêu cầu RBS ở mức ứng dụng. Mặc dù chúng có thể mô tả cùng

một người dùng, nhưng điều này không có nghĩa là luôn luôn như vậy.
Theo mặc định, thuộc tính

Thread.CurrentPrincipal

là không xác định. Vì việc thu lấy các

thông tin liên quan đến người dùng có thể mất nhiều thời gian, và chỉ một phần nhỏ trong số
các ứng dụng sử dụng thông tin này, các nhà thiết kế .NET chọn cách khởi dựng "lười" đối với
thuộc tính

CurrentPrincipal

. Trước tiên, mã lệnh thu lấy thuộc tính

Thread.CurrentPrincipal

, bộ thực thi gán một thể hiện

IPrincipal

cho thuộc tính này theo

logic sau đây:

1. Nếu miền ứng dụng mà tiểu trình hiện hành đang thực thi có một principal mặc định,

thì bộ thực thi sẽ gán principal này cho thuộc tính

Thread.CurrentPrincipal

.

Theo mặc định, miền ứng dụng không có principal mặc định. Bạn có thể thiết lập
principal mặc định của một miền ứng dụng bằng cách gọi phương thức

SetThreadPrincipal

trên một đối tượng

System.AppDomain

mô tả miền ứng dụng bạn

muốn cấu hình. Để gọi

SetPrincipalPolicy

, mã lệnh của bạn phải có phần tử

ControlPrincipal

của

SecurityPermission

. Bạn chỉ có thể thiết lập principal mặc định

một lần cho mỗi miền ứng dụng; lời gọi

SetThreadPrincipal

thứ hai dẫn đến ngoại lệ

System.Security.Policy.PolicyException

.

2. Nếu miền ứng dụng không có principal mặc định, chính sách principal của miền ứng

dụng sẽ xác định hiện thực

IPrincipal

nào sẽ được tạo ra và gán nó cho

Thread.CurrentPrincipal

.

Để cấu hình chính sách principal cho một miền ứng dụng, bạn cần thu lấy đối tượng

AppDomain

mô tả miền ứng dụng và gọi phương thức

SetPrincipalPolicy

của đối tượng

này. Phương thức

SetPrincipalPolicy

nhận vào một thành viên thuộc kiểu liệt kê

System.Security.Principal.PrincipalPolicy

, giá trị này cho biết kiểu của đối tượng

IPrincipal

sẽ được gán cho

Thread.CurrentPrincipal

. Để gọi

SetPrincipalPolicy

,

mã lệnh của bạn phải có phần tử

ControlPrincipal

của

SecurityPermission

. Bảng 13.4

liệt kê các giá trị của

PrincipalPolicy

; giá trị mặc định là

UnauthenticatedPrincipal

.

3. Nếu mã lệnh của bạn có phần tử

ControlPrincipal

của

SecurityPermission

, bạn có thể

tự tạo ra đối tượng

IPrincipal

và trực tiếp gán nó cho thuộc tính

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.