1

フォーム認証を使用するASP.NETMVCWebアプリがあります。

ActiveDirectoryMembershipProviderを使用して、ドメインに対してユーザーを検証しています。

if (Membership.ValidateUser(m.Username, m.Password))
{

    FormsAuthentication.SetAuthCookie(m.Username, true);

    ....

これは、ユーザーがログインしたときにのみ検証されることを意味します。

もちろん、ユーザーのパスワードが変更されてもログインしたままになるという問題があります。さらに悪いことに、ユーザーは恨みを持って会社を辞め、引き続きアクセスできます。

このような単純なユースケースには明白な答えがあると思いましたが、私はしばらくの間これに固執しています。

ユーザーのパスワードをセッションに入れて、毎回検証することはできますが、それは正しくありません。

これを処理するための提案された/正しい方法は何ですか?

4

2 に答える 2

1

一般的な解決策は、ユーザーがサービスの購読を解除したとき、またはあまり一般的ではないがパスワードを変更したときに、強制的にログアウトすることです。この方法を使用してください:

    FormsAuthentication.SignOut();
    FormsAuthentication.RedirectToLoginPage();

ユーザーをアプリの外部(つまりActive Directory)で非アクティブ化できる場合、通常はセッションのタイムアウトに依存し、重要な操作のためにもう一度資格情報を要求します。セッションがまだアクティブな間、非アクティブ化されたユーザーの作業を絶対に許可できない場合は、はい、すべてのリクエストで資格情報を確認する必要があります。アプリにパスワードを保存することは非常に悪い考えであるため、要求ごとに資格情報を要求する必要があることを意味します。これは間違いなくさらに悪い考えです。

パスワードの変更に関しては、通常、ユーザーの権限は変更されないため、ユーザーが作業を継続できるようにすることは無害である必要があります。

于 2012-11-30T04:12:09.887 に答える
1

答えは、定期的に(30分ごとに)User.IsApprovedとUser.LastPasswordChangedDateをチェックして、ユーザーの資格情報がまだ有効であることを確認することです。

これを行うには、FormsAuthentication.SetAuthCookieを使用するのではなく、FormsAuthenticationTicketとCookieを手動で作成する必要があります。

ユーザーを検証した日付をUserData内に置き、これをLastPasswordChangedDateと比較します。

私はこれを実装しました、そしてそれは完全に機能します。

詳細はこちら

ActiveDirectoryのパスワードがCookieと異なるかどうかを確認します

于 2013-01-03T00:57:06.787 に答える