10

LogonUserを使用して、ユーザーのドメイン資格情報のセットを検証しています。

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

不穏な結果:

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

失敗コード:

  • 0x00000569:ログオンの失敗: ユーザーは、このコンピューターで要求されたログオンの種類を許可されていません
  • 0x0000052E:ログオン失敗: ユーザー名またはパスワードが不明です

詳細:

  • ユーザーが有効な資格情報を入力すると、関数は を返しますtrue(良い)
  • ユーザーが無効な資格情報を入力すると、関数は を返しますfalse(良い)

  • ユーザーがパスワードを変更し、新しい有効な資格情報を入力すると、関数は を返しますtrue(良い)

  • ユーザーが無効な資格情報を入力すると、関数は を返しますfalse(良い)

  • ユーザーが古い資格情報を入力すると、関数は を返しますtrue(悪い)

注:ユーザーが別のマシン (以前にログオンしたことのないマシン) に移動し、古い資格情報を入力すると、LogonUser引き続きtrueが返されます。これは、キャッシングがローカル マシンでは行われていないことを意味しますが、 「ネットワーク上」で行われます。

  • ユーザーがパスワードを再度変更し、新しい資格情報を入力すると、関数は を返しますtrue(良い)
  • ユーザーが古い資格情報を入力すると、関数は を返しますtrue(悪い)
  • ユーザーが古い資格情報を入力すると、関数は を返しますfalse(良い)

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

注: ユーザーが古い (または古い古い) パスワードでWindows にログオンしようとすると、無効なパスワード エラーが発生します。


MSDN から:

LOGON32_LOGON_NETWORK
このログオン タイプは、ハイ パフォーマンス サーバーがプレーンテキスト パスワードを認証することを目的としています。LogonUser 関数は、この種類のログオンの資格情報をキャッシュしません。

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

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

プレーンテキストのパスワードを認証しているので、LOGON32_LOGON_NETWORK. 対話型ログオンは資格情報をキャッシュしますが、ここでは許可されていません。Batchは、いつ使用する必要があるかについて文書化されていませんが、単に失敗します。


更新: ドメインは以下のみを許可します。

  • 以前のパスワード (それ以降ではない)
  • 60分だけ

1 時間の猶予期間を設けているのは、Active Directory の「機能」であることは明らかです。

ただし、猶予期間は必要なく、ドメインの設定も変更したくありません (古いパスワードの使用に 1 時間の猶予期間を許可するドメインの設定がわからないため) .

4

1 に答える 1

4

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

ところで、すでに GUI を提供しているのであれば、LOGON32_LOGON_INTERACTIVE.

于 2012-05-01T00:51:22.473 に答える