0

System.Web.SecurityAPIを使用して質問/回答に基づいてパスワードをリセットするWebアプリケーションを作成しようとしています。

例外があります:

DirectoryServicesCOMException (0x8007202f): 制約違反が発生しました" ユーザーが質問に対して不適切な回答を 1 つ提供した場合。

の値をattributeMapFailedPasswordAnswerCount設定しないようにリセットすると、アカウントは再びアクティブになります。

AD のアカウント ロックアウトのしきい値は、20 回のログオン試行に設定されています。

私は AD の知識の初心者であり、誰かがこの問題を解決する方法を教えてくれれば感謝します。

ありがとうございました。

4

1 に答える 1

1

ASP.NETを使用していると思いますか?私は実際には経験がなく、一般的に.NETの経験もあまりありません(私はまだ自分自身を学んでいます)が、これはさまざまなActive Directory APIの例を提供する非常に便利なリンクでした(リンク)。ユーザーパスワードのリセットを含みます。設定方法がわからない場合は、DirectoryEntryクラスへのリンクを次に示します(link)。さらに、名前空間のドキュメントを閲覧するだけでも非常に役立ちます(リンク)。おそらく、私がMicrosoftについて気に入っているのは、優れたドキュメントだけです。

私は通常次のようなことをします(IronPythonで、使用できるコードに直接変換されません):

ou = System.DirectoryServices.DirectoryEntry("LDAP://ou=Users,dc=whatever,dc=something,dc=localetc")
search = System.DirectoryServices.DirectorySearcher(ou, "(samAccountName="+acc"+")", Array[str](["distinguishedName"]]))
result = search.FindAll() # note 1
if result.Count != 1:
    raise BadError
else:
    ent = System.DirectoryServices.DirectoryEntry(result[0].Properties["distinguishedName"][0])
    ent.Username = admin # note 2
    ent.Password = pwd
    ent.Invoke("SetPassword", Array[object](["newpassword!"]))
    ent.Properties["LockOutTime"].Value = 0
    ent.CommitChanges()

ノート:

  1. これで複数の結果が返される場合は、問題があります。

  2. これとパスワードは、これを実行しているアカウントにユーザーを変更する権限がない場合にのみ必要です。私はこれらを非特権アカウントで実行しているので、スクリプトに管理者の資格情報を含める必要があります(心配しないでください。ハードコードされていません)。

ああ、あなたはアカウントのロックアウトのしきい値がかなり高いです。ユーザーの適性に応じて、3〜5をお勧めします。

于 2012-07-27T15:59:36.907 に答える