Danh mục

Các giải pháp lập trình CSharp- P66

Số trang: 10      Loại file: pdf      Dung lượng: 2.62 MB      Lượt xem: 3      Lượt tải: 0    
Thu Hiền

Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Các giải pháp lập trình CSharp- P66: Các giải pháp lập trình C# khảo sát chiều rộng của thư viện lớp .NET Framework và cung cấp giải pháp cụ thể cho các vấn đềthường gặp. Mỗi giải pháp được trình bày theo dạng “vấn đề/giải pháp” một cách ngắn gọn và kèm theo là các ví dụ mẫu.
Nội dung trích xuất từ tài liệu:
Các giải pháp lập trình CSharp- P66 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ả Không có đối tượng IPrincipal nào được tạo ra, NoPrincipal Thread.CurrentPrincipal trả về một tham chiếu null. Một đối tượng System.Security.Principal. UnauthenticatedPrincipal GenericPrincipal rỗng được tạo ra và được gán cho Thread.CurrentPrincipal. Một đối tượng WindowsPrincipal (mô tả người WindowsPrincipal 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ũngphả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ườidù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, khichạ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êucầ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ácyê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ênngườ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();542Chương 13: Bảo mật}public static void ProtectedMethod2() { // Một yêu cầu bảo mật bắt buộc dựa-trên-vai-trò: principal // hiện tại là một thành viên của vai trò Managers hay // Developers. Khi sử dụng PrincipalPermission, bạn chỉ có thể diễn // tả mối quan hệ OR. Đó là vì phương thức PrincipalPolicy.Intersect // luôn trả về một quyền rỗng trừ khi hai input là như nhau. // Tuy nhiên, bạn có thể sử dụng lôgic của mã lệnh để hiện thực // các điều kiện phức tạp hơn. Trong trường hợp này, tên của định // danh là không quan trọng. System.Security.Permissions.PrincipalPermission perm1 = new System.Security.Permissions.PrincipalPermission (null, @MACHINE\Managers); System.Security.Permissions.PrincipalPermission perm2 = new System.Security.Permissions.PrincipalPermission (null, @MACHINE\Developers); perm1.Union(perm2).Demand();}public static void ProtectedMethod3() { // Một yêu cầu bảo mật bắt buộc dựa-trên-vai-trò: principal // hiện tại mô tả một định danh với tên là nnbphuong81 và // là một thành viên của vai trò Managers. System.Security.Permissions.PrincipalPermission perm = new System.Security.Permissions.PrincipalPermission (@MACHINE\nnbphuong81, @MACHINE\Managers); perm.Demand();}Phần thứ hai trình bày ba phương thức được bảo vệ bằng các yêu cầu RBS khai báo, tươngđương với các yêu cầu RBS bắt buộc vừa được trình bày ở trên: 543 Chương 13: Bảo mật// Một yêu cầu bảo mật khai báo dựa-trên-vai-trò: principal hiện tại// 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.[PrincipalPermission(SecurityAction.Demand, Name = @MACHINE\nnbphuong81)]public static void ProtectedMethod1() { /*...*/}// Một yêu cầu bảo mật khai báo dựa-trên-vai-trò: principal hiện tại// là một thành viên của vai trò Managers hay Developers. Bạn chỉ// có thể diễn tả mối quan hệ OR (không thể diễn tả mối quan hệ AND).// Tên của định danh là không quan trọng.[PrincipalPermission(SecurityAction.Demand, Role = @MACHINE\Managers)][PrincipalPermission(SecurityAction.Demand, Role = @MACHINE\Developers)]public static void ProtectedMethod2() { /*...*/}// Một yêu cầu bảo mật khai báo dựa-trên-vai-trò: principal hiện tại// mô tả một định danh với tên là nnbphuong81 và là một thành viên// của vai trò Managers.[PrincipalPermission(SecurityAction.Demand, Name = @MACHINE\nnbphuong81, Role = @MACHINE\Managers)]public static void ProtectedMethod3() { /*...*/}15. Giả nhận người dùng Windows Bạn muốn mã lệnh của bạn chạy trong ngữ cảnh của một người dùng Windows nào đó chứ không phải tài khoản người dùng hiện đang tích cực. Thu lấy đối tượng System.Security.Principal.WindowsIdentity mô tả người dùng Windows mà bạn cần giả nhận, rồi gọi phương thức Impersonate của đối tượng WindowsIdentity.Mỗi tiểu trình Windows đều có một access token kết ...

Tài liệu được xem nhiều: