3

AdMembership proivder で FormsAuthentication を使用して、asp.net を実行しています。

プロバイダーでネイティブにサポートされていないため、「次回ログオン時にパスワードを変更する」画面を手動で作成する必要があります。

電話する :

if (Membership.Provider.ChangePassword(cpCv.LoginName, cpCv.OldPassword, cpCv.NewPassword))

ユーザーを検証し、パスワードを変更します (ただし、「次回ログオン時フラグ」はクリアしません)。

ただし、常に失敗します(「次回ログオン時にパスワードを変更する」フラグが設定されていると、メンバーシップの検証が失敗すると思います。)

パスワードをリセットして「次回ログオン時」フラグをクリアする前に、「古いパスワード」と「ユーザー名」が一致していることを確認できるように、ユーザーを検証する最も簡単な方法は何ですか?

私はresetpasswordとclear flagの機能を持っています.それは私を行き詰まらせた検証です.

このコードも試してみました。リセットフラグが false の場合はログインし、true の場合はログインに失敗します。

    DirectoryEntry de = new DirectoryEntry( path, "jcsn\\"+AdUserName, AdPassword );

    try
    {
        //Bind to the native AdsObject to force authentication.
        object obj = de.NativeObject;

        DirectorySearcher search = new DirectorySearcher( de );

        search.Filter = "(SAMAccountName=" + AdUserName + ")";
        search.PropertiesToLoad.Add( "cn" );
        SearchResult result = search.FindOne();

        if ( null == result )
        {
            return false;
        }

    }
    catch ( Exception ex )
    {
        throw new Exception( "Error authenticating user. " + ex.Message );
    }

ありがとう、

エリック-

4

2 に答える 2

0

これは古いスレッドですが、回答がないようです。

リンクされたフォーラムの投稿で、開発者はこの同じ問題について Microsoft に連絡し、 「ユーザーは次回ログオン時にパスワードを変更する必要があります」のアカウント オプションがSysAdmin によってチェックされたときに、 Membership.ValidateUser()がfalseを返しました。

ActiveDirectoryMembershipProvider は、「User must change password on next logon....」フラグが設定されているユーザーがログインすることを許可しません。MS によると、これは設計によるものです。ログオン時に新しいパスワードを入力すると、認証がブロックされます。

彼らは続けて、FormsAuthentication でセキュリティ API を使用したヒントを提供しましたが、例は提供しませんでした。

誰にもアイデアはありますか?

于 2013-03-25T19:46:54.107 に答える
0

Membership.Validate という関数があります。あなたのコードは次のようになると思います:

if(Membership.ValidateUser(txtUserName.Text, txtPassword.Text)) 
{   
    //Proceed with the change 
}

ChangePassword の呼び出しが失敗する理由はわかりませんが、ChangePassword が ValidateUser を呼び出す可能性があると思います。

于 2011-04-07T17:19:31.793 に答える