私は何を持っていますか?
Windows または FBA ログインのいずれかを選択するためのドロップダウン ボックスを備えたすぐに使えるログイン ページを使用して、Web アプリケーションの 1 つで FBA を構成しました。すべてが正常に機能しています。
私は何をしたいですか?
ユーザー名とパスワードのテキスト ボックスと、Windows ユーザーと FBA ユーザーの両方の認証に使用されるログイン ボタンを備えたカスタム ログイン ページが必要です。2 つの異なるログインを区別するために、OnAuthenticate イベントを処理し、ユーザー名に「\」が含まれているかどうかを確認し、それ以外の場合は Windows ユーザーであると想定します。それは FBA ユーザーです。
これは、OnAuthenticate イベント ハンドラーで記述されたコードです。
protected void signinControl_Authenticate(object sender, AuthenticateEventArgs e)
{
string fullUserName = signinControl.UserName;
string username = null;
if (fullUserName.Contains("\\")) //Windows user
{
string domain = fullUserName.Substring(0, fullUserName.IndexOf("\\"));
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domain))
{
username = fullUserName.Substring(fullUserName.IndexOf("\\") + 1);
e.Authenticated = pc.ValidateCredentials(username, signinControl.Password);
}
}
else //FBA user
{
e.Authenticated = Membership.ValidateUser(fullUserName, signinControl.Password);
}
}
私はどのような問題に直面していますか?
上記のコードは、FBA ユーザーに適しています。しかし、検証後にe.Authenticated
が設定されていても、Windows ユーザーでログインしようとすると、 true
「ログイン試行が成功しませんでした。もう一度やり直してください。」というエラーがスローされます。
e.Authenticated = pc.ValidateCredentials(username, signinControl.Password);
に設定e.Authenticated
するとtrue
、ログインページから要求されたページにユーザーがリダイレクトされるはずです。Windows ユーザーをサインインさせるために何か他のことをしなければならない場合、誰か助けてもらえますか?
更新-1 :
メソッドを使用SetAuthCookie()
して Cookie を明示的に設定しましたが、結果は同じです。
FormsAuthentication.SetAuthCookie(username, true);