2

ユーザー ベースが Active Directory に保持されているプログラムがあります。AD と私のプログラムの仲介役として ADFS を使用します。ユーザーがログインを試みると、C# セキュリティ トークンを使用して ADFS から有効なトークンを取得します。

ログイン試行が何らかの理由で失敗すると、エラー 3242 が表示されます。

{"ID3242: セキュリティ トークンを認証または承認できませんでした。"}

これは、間違ったユーザー名またはパスワードを入力した場合、または Active Directory でパスワードの有効期限が切れた場合に発生します。

ユーザーがログインに失敗した場合、なぜログインできなかったのかについて、より適切なエラー メッセージを表示できるようにしたいと考えています。パスワードの有効期限が切れていることを伝え (期限が切れている場合)、パスワードのリセット方法などを説明するのが理想的です。

皆さんへの私の質問は次のとおりです。C# SecurityToken オブジェクトを使用しているときに、ログインに失敗したときにユーザーにより良いエラー メッセージを提供するにはどうすればよいですか?

私はこれらの概念に非常に慣れていないため、詳細が不十分であることをあらかじめお詫びします。この投稿は、誰かが私を良い方向に向けることができるかどうかを確認するために、触手を出しています. お時間をいただき、ご回答いただきありがとうございます。

4

2 に答える 2

1

あなたの質問は「期限切れのパスワード」について尋ねますが、あなたのコメントは「期限切れのアカウント」に言及しています。彼らは非常に異なる獣です!

期限切れのパスワード-ms-DS-User-Account-Control-Computed属性

期限切れのアカウント:

principalContext = GetPrincipalContext(ldapOU);
userPrincipal = new UserPrincipal(principalContext);
DateTime date = userPrincipal.AccountExpirationDate;

あなたに日付を与えて、それから単に比較します。

于 2012-07-18T00:50:29.790 に答える
1

エラー メッセージの動作自体を変更することはできません。ただし、例外をキャッチして AD にクエリを実行し、ユーザーが存在するかどうか、アカウントが無効になっているかどうか、アカウントの有効期限が切れているかどうかを判断し、元の例外を新しい例外でラップして追加の詳細を提供し、それをスローすることができます。ただし、攻撃者がこれを使用してシステムに関する有用な情報を取得する可能性があるため、ユーザー名またはパスワードが間違っていたかどうかなどの情報を提供することも通常はお勧めできません。そもそもエラー メッセージがそのような情報を返さないのはそのためです。管理者は、ユーザーが問題を報告したときにいつでもアカウントを確認できます。

于 2012-07-17T19:23:47.127 に答える