4

質問

SQL ServerなどのSSPI認証済みネットワークサービスへの接続に使用される現在のプロセスのネットワークIDを取得するための.NET(またはアンマネージWindowsAPIへのp/ invoke)メソッド呼び出しとは何ですか?


私が念頭に置いている特定のユースケースは、ドメインに参加していないマシンで作業し、ローカルのログオンIDの代わりにそのIDをネットワーク認証にrunas /noprofile /netonly /USER:DOMAIN\username使用するプロセスを起動するために使用できる場合です。DOMAIN\usernameMACHINE\username

DOMAIN\usernameここに渡されるIDを取得するメソッド呼び出しが必要RUNASです。

ありがとう!


明確にするために、現在のユーザーのローカルにログオンしているID(​​ネットワークIDとは異なる場合があります)を取得するためのメソッド呼び出しを探していません。これは、回答を除外 System.Security.Principal.WindowsIdentity.GetCurrent().NameEnvironment.UserName、おそらくSystem.Threading.Thread.CurrentPrincipal.Identity.Name受け入れられないようにします。もちろんここで間違っていることが示されない限り、これらのいずれかが解決策であると誤って示している回答には反対票を投じます。:)

4

1 に答える 1

2

これにより、アウトバウンド接続のユーザー(「user @ domain」の形式)が出力されます。C++です。

CredHandle credHandle;
TimeStamp timeStamp;
SECURITY_STATUS status = AcquireCredentialsHandle(0, L"Negotiate", SECPKG_CRED_OUTBOUND, 0, 0, 0, 0, &credHandle, &timeStamp);
if (status == SEC_E_OK)
{
    SecPkgCredentials_Names names;
    status = QueryCredentialsAttributes(&credHandle, SECPKG_CRED_ATTR_NAMES, &names);
    if (status == SEC_E_OK)
    {
        wprintf(L"%s\n", names.sUserName);
        status = FreeContextBuffer(names.sUserName);
    }
    status = FreeCredentialsHandle(&credHandle);
}

その他の情報:runasCreateProcessWithLogonWをLOGON_NETCREDENTIALS_ONLYフラグとともに使用していると思います。これにより、既存のログオンセッションに基づいて新しいログオンセッションが作成され、その中にネットクレデンシャルが隠されます。GetTokenInformationとLsaGetLogonSessionDataは、ネットワークユーザーではなく、元のユーザーに関する情報を返します。ネットワークユーザーについて知っておく必要のあるWindowsの1つのビットはSSPIです。これにより、ユーザー名とドメインをリモートサーバーに送信できます。したがって、上記のコード。

于 2012-10-28T17:29:50.683 に答える