1

基本的に、私はこの投稿と同じ問題を実行していますASP.NETで偽装するときにマップされたドライブにアクセスする

私はレガシーWebサイトで作業しており、管理者がサイトのロゴやバナーなどをデスクトップ上の画像ファイルからサーバー上のマップされたドライブに変更できるようにする必要があります。

そのため、彼らのWebサイトは、ドライブに保存する必要があるときはいつでもなりすましを使用しており、正常に機能しています。しかし、私はそれを彼らのテスト環境でも私のテスト環境でも機能させることができません。

何か案は?ユーザーとパスワードを再確認しました(コードはドメインを指定していません)が、それは問題ではありません。

なりすましを処理するコードからの抜粋を次に示します。

public bool ImpersonateUser(String user, String password, String domain)
{
    WindowsIdentity tempWindowsIdentity;
    IntPtr token = IntPtr.Zero;
    IntPtr tokenDuplicate = IntPtr.Zero;

    if (RevertToSelf())
    {
        if (LogonUserA(user, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) != 0)
        {
            if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
            {
                tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
                impersonationContext = tempWindowsIdentity.Impersonate();
                if (impersonationContext != null)
                {
                    CloseHandle(token);
                    CloseHandle(tokenDuplicate);
                    return true;
                }
            }
        }
    }
    //... rest of the code

そして-消毒された-テスト:

if (impUtility.ImpersonateUser("user", "password", string.Empty))
{
    fu.SaveAs(@"C:\Images\" + imgName);
}
4

1 に答える 1

0

私もそれを機能させることができませんでした。

そして、それを実装できたとしても、もっと簡単な方法があることに気づきました。私が行ったことは、ターゲットマシン上のフォルダーを共有し、アプリケーションを使用するユーザーに読み取り/書き込み権限のみを付与することでした。

//Impersonate user to save file on server
WindowsIdentity wi = (WindowsIdentity)User.Identity;
WindowsImpersonationContext wic = null;

try
{
    wic = wi.Impersonate();
    if (wi.IsAuthenticated)
        asyncFileUpload.SaveAs(location);
}
catch (Exception ex)
{
    //Log Error or notify here
    success = false;
}
finally
{
    if (wic != null)
        wic.Undo();
}

ユーザー用にADグループを作成し、非表示の共有ドライブでそれらのユーザーに読み取り/書き込み権限を付与しました。これにより、ユーザーごとにマップされたドライブを作成する必要がないため、保守が容易になります。

于 2010-06-30T14:32:11.223 に答える