Repository navigation
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();
}| メソッド | 内容 |
|---|---|
ImpersonateValidUser(userName, domain, password) |
ユーザ名・ドメイン・パスワードで偽装する。戻り値は成否(bool) |
ImpersonateValidUser(userName, domain, password, impersonationLevel, out errorInfo) |
偽装レベルを指定し、失敗時のエラー情報を受け取る |
ImpersonateWinIdUser(WindowsIdentity) |
既存の WindowsIdentity で偽装する |
UndoImpersonation() |
偽装を解除する |
CreateProcessAsImpersonationUser(...)(static) |
偽装ユーザでプロセスを起動する |
- 偽装の解除は
finallyで必ず行う。解除し忘れると、以降の処理が偽装ユーザの権限で動く。 - パスワードをコードや設定ファイルに平文で書かない。
- サービスやタスクから使う場合のアカウントの問題は、サービス・タスク系のアカウント問題を参照。
- net10.0 や Linux では、偽装に頼らず、プロセスの実行アカウントやコンテナの権限設計で解決することを検討する。
Tags: 再構築
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。