14

Windows ID フレームワークを使用してデスクトップ アプリケーションのユーザーを認証するためのシンプルな Web サービスを開発しようとしていWindowsIdentity.GetCurrent().Tokenます。ドメインのレイアウトとサーバーの構成)。私はトークンをうまく返し、それをに変換していIntPtrます。

トークンを検証して、特定の Active Directory (またはそのほかの) によって生成されたことを確認する方法について、私は途方に暮れています。トークンを指定して新しいインスタンスを作成しようとしましたWindowsIdentityが、例外が発生しました (メッセージ: 偽装のトークンが無効です - 複製できません)。

誰かが助けやヒントを提供してくれるなら、私は大歓迎です、事前に感謝します.

4

2 に答える 2

1
public bool DoesUserExist(string userName)
{
    using (var domainContext = new PrincipalContext(ContextType.Domain, "DOMAIN"))
    {
        using (var foundUser = UserPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, userName))
        {
            return foundUser != null;
        }
    }
}

ユーザーが存在するかどうかを確認するため。System.DirectoryServices.AccountManagementこれは、名前空間とアセンブリに由来します。

取得できるユーザー名を渡すだけで、ユーザーがWindowsIdentity.GetCurrent()ユーザーグループに属している場合、true/false が返されます。(DOMAIN を必要なグループ名に置き換えます。)

于 2014-08-07T10:49:43.590 に答える
0

良い、

私があなたの質問を正しく理解していれば、直接 API 呼び出しを行うことが可能であることはわかっています。advapi32.dll の LogonUser が答えです。次のスニペットは私のために働いた

public class ActiveDirectoryHelper
{
    [DllImport("advapi32.dll", SetLastError = true)]
    private static extern bool LogonUser(
        string lpszUsername,
        string lpszDomain,
        string lpszPassword,
        int dwLogonType,
        int dwLogonProvider,
        out IntPtr phToken
        );

    [DllImport("kernel32.dll", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool CloseHandle(IntPtr hObject);

    public static bool Authenticate(string userName, string password, string domain)
    {
        IntPtr token;
        LogonUser(userName, domain, password, 2, 0, out token);

        bool isAuthenticated = token != IntPtr.Zero;

        CloseHandle(token);

        return isAuthenticated;
    }

    public static IntPtr GetAuthenticationHandle(string userName, string password, string domain)
    {
        IntPtr token;
        LogonUser(userName, domain, password, 2, 0, out token);
        return token;
    }


}
于 2014-07-11T21:21:37.510 に答える