2012-04-30 34 views
10

私はLogonUserを使用して、ユーザーのドメイン資格情報のセットを検証しています。LogonUserでキャッシュされた資格情報を使用しない方法

LogonType Current Password    Old password 
=========== ============================== ======================== 
Network  Succeeds      Succeeds 
Batch  Fails (0x00000569)    Fails (invalid password) 
Interactive Succeeds      Fails (invalid password) 

失敗コード:

  • 0x00000569ログオン失敗:ユーザーはこのコンピュータで要求された種類のログオンを実行していない
  • 不穏な結果と

    LogonUser(accountName, domain, password, 
         LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_WINNT50, ref token); 
    

    0x0000052Eログオン失敗:Unk nownユーザー名やパスワード

詳細:

  • ユーザーは機能がtrueを返し有効資格情報を入力した場合。 (良い)
  • ユーザーが無効資格情報を入力した場合の機能はfalseを返します。 (良い)

  • ユーザーが自分のパスワードを変更し、機能がtrue返す彼らの新しい有効資格情報を入力した場合。 (良い)

  • ユーザーが無効資格情報を入力した場合の機能はfalseを返します。 (良い)

  • ユーザーが自分の古い資格情報を入力した場合の機能はtrueを返します。 (悪い)

注:ユーザーが別のマシン(彼らは前にログオンしたことがありません1)に移動し、古い資格情報を入力し、LogonUserはし続けた場合trueを返します。つまり、キャッシュはローカルマシンでは発生していませんが、何らかの形で "ネットワークにある" "です。

  • ユーザーが自分のパスワードを再度を変更し、その新しい新しい資​​格情報を入力した場合、この関数はtrueを返します。(良い)
  • ユーザーが自分の古い資格情報を入力した場合の機能はtrueを返します。 (悪い)
  • ユーザーが自分の古い古い資格情報を入力する場合、関数はfalseを返します。 (良い)

どのように、呼び出しLogonUserが、私はそれがキャッシュされた資格情報を使用しないようにドメインを指示する指示することができたとき。

:ユーザーが自分の古い(または古い)パスワードを使用してWindowsにログオンしようとすると、彼らは、無効なパスワードエラーを取得します。このログオンの種類は、平文パスワードを認証するために、高性能サーバを対象として

LOGON32_LOGON_NETWORK
:MSDNから


。 LogonUser関数は、このログオンタイプに対して資格情報をキャッシュしません。

LOGON32_LOGON_INTERACTIVE
このログオンの種類は、対話的にそのようなterminalサーバ、リモートシェル、または同様のプロセスによってログオンされているユーザとして、コンピュータを使用するユーザのために意図されています。このログオンタイプには、切断された操作のログオン情報をキャッシングするの追加費用があります。;したがって、一部のクライアント/サーバーアプリケーション
(メールサーバーなど)には不適切です。です。

LOGON32_LOGON_BATCH このログオンタイプは、プロセスが直接の介入なしにユーザーに代わって実行されるバッチサーバーを対象としています。このタイプは、メールやWebサーバーなど、一度に多くの平文認証の試行を処理する高性能サーバー向けです。

私はは、プレーンテキストのパスワードを認証し、そうLOGON32_LOGON_NETWORKを使用しています対話型ログオンキャッシュの資格情報はここでは許可されていません。 バッチは、使用するべき時期については文書化されていませんが、単に失敗します。


更新:ドメインのみを許可:

  • 以前のパスワード(ない、さらにバック任意の)
  • はわずか60分

のためにそれはそれはだと私には無地です1時間の猶予期間を与えているActive Directoryの「機能」

私は猶予期間は望んでいませんが、私はドメインの設定を変更したくありません。(ドメインの設定がわからないので、1時間の猶予期間がありますあなたの古いパスワード)。

答えて

4

これはNTLMの機能です。デフォルトの60分を変更することができます。 OldPasswordAllowedPeriod DWORD値を分単位でドメインコントローラのHKLM\SYSTEM\CurrentControlSet\Control\Lsaキーに追加するか、[パスワード履歴の強制]ポリシーを無効にすることができます。 LOGON32_PROVIDER_WINNT50のような別のログオンプロバイダを使用することもできます。

ところで既にGUIを提供しているのであれば、私はLOGON32_LOGON_INTERACTIVEを使っても不都合がないと思う。

+1

i * am * 'LOGON32_PROVIDER_WINNT50'を使用しています - 私は* deprated NTLMを使用したくありません。だから質問に暗黙のうちに、 "どのようにNTLM認証ではなくKerberosを使用できますか?"しかし、「なぜLogonUserはKerberosではなくNTLMを使用しているのですか?」*という質問は、StackOverflowも[ServerFaultも答えることができないようです](http://serverfault.com/questions/384719/how-toドメインは、ドメインに参加しています)。 –

関連する問題