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

545

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

Ứng dụng này sử dụng hàm

LogonUser

của Win32 API để thu lấy Windows access token cho

người dùng được chỉ định, giả nhận người dùng này, rồi trở về ngữ cảnh của người dùng cũ.
Ví dụ, lệnh

ImpersonationExample nnbphuong81 password

sẽ giả nhận người dùng

nnbphuong81

nếu người dùng đó đã tồn tại trong cơ sở dữ liệu tài khoản cục bộ.

using System;

using System.IO;

using System.Security.Principal;

using System.Security.Permissions;

using System.Runtime.InteropServices;

// Bảo đảm assembly có quyền truy xuất mã lệnh không-được-quản-lý

// và có quyền kiểm soát principal của tiểu trình.

[assembly:SecurityPermission(SecurityAction.RequestMinimum,

UnmanagedCode=true, ControlPrincipal=true)]

public class ImpersonationExample {

// Định nghĩa các hằng số được sử dụng cùng với hàm LogonUser.

const int LOGON32_PROVIDER_DEFAULT = 0;

const int LOGON32_LOGON_INTERACTIVE = 2;

// Nhập hàm Win32 LogonUser từ advapi32.dll. Chỉ định

// "SetLastError = true" để có thể truy xuất các mã lỗi của Win32.

[DllImport("advapi32.dll", SetLastError=true)]

static extern int LogonUser(string userName, string domain,

string password, int logonType, int logonProvider,

ref IntPtr accessToken);

public static void Main(string[] args) {

// Tạo một IntPtr mới để giữ lấy access token

// do hàm LogonUser trả về.

IntPtr accessToken = IntPtr.Zero;

// Gọi LogonUser để thu lấy access token cho người dùng

// được chỉ định. Biến accessToken được truyền cho LogonUser

// bằng tham chiếu và sẽ chứa tham chiếu đến Windows access token

// nếu LogonUser thành công.

int result = LogonUser(

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.