Skip to content

OTR_IntervalImpersonationSample

nishi_74322014 edited this page Oct 27, 2026 · 1 revision

区間偽装のサンプル

概要

コードの特定の区間だけ、任意の Windows ユーザを偽装(Impersonation)するサンプル。

  • Open 棟梁の部品 IdentityImpersonation(Touryo.Infrastructure.Public.Security)の
    ImpersonateValidUser と UndoImpersonation を使う。
  • Windows 専用で、.NET Framework 4.8(net48)版のみ。net10.0 版の Public には含まれていない(ビルド対象から除外)。

詳細

サンプル

IdentityImpersonation ii = null;
bool ret = false;

try
{
    // コードの特定部分を実行するときのみ、任意のユーザを偽装する。
    ii = new IdentityImpersonation();
    ret = ii.ImpersonateValidUser("ユーザ名", "ドメイン", "パスワード");

    // 偽装したユーザの権限でファイルを開く
    Console.WriteLine(
        string.Format("ユーザ「{0}」を偽装:", WindowsIdentity.GetCurrent().Name)
        + ResourceLoader.LoadAsString(@"c:\test.txt", Encoding.GetEncoding(CustomEncode.UTF_8)));
}
catch (Exception ex)
{
    Debug.WriteLine(ex.Message);
}
finally
{
    // 偽装解除(必ず finally で行う)
    if (ii != null) ret = ii.UndoImpersonation();
}

API

メソッド 内容
ImpersonateValidUser(userName, domain, password) ユーザ名・ドメイン・パスワードで偽装する。戻り値は成否(bool)
ImpersonateValidUser(userName, domain, password, impersonationLevel, out errorInfo) 偽装レベルを指定し、失敗時のエラー情報を受け取る
ImpersonateWinIdUser(WindowsIdentity) 既存の WindowsIdentity で偽装する
UndoImpersonation() 偽装を解除する
CreateProcessAsImpersonationUser(...)(static) 偽装ユーザでプロセスを起動する

注意点

  • 偽装の解除は finally で必ず行う。解除し忘れると、以降の処理が偽装ユーザの権限で動く。
  • パスワードをコードや設定ファイルに平文で書かない。
  • サービスやタスクから使う場合のアカウントの問題は、サービス・タスク系のアカウント問題を参照。
  • net10.0 や Linux では、偽装に頼らず、プロセスの実行アカウントやコンテナの権限設計で解決することを検討する。

参考


Tags: 再構築

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki
開発基盤部会 Wiki

移行管理: DONE / TODO

Clone this wiki locally