ASP.NET でログイン コントロールを使用せずにカスタム MembershipProvider を使用する
-
09-06-2019 - |
質問
カスタムがあります MembershipProvider
で ASP.NET
. 。ユーザーを検証できるシナリオは 2 つあります。
ユーザーログイン経由
login.aspx
ユーザー名/パスワードを入力してページを開きます。利用した ログイン制御 そしてそれをMyMembershipProvider
. 。これは完全に正常に動作しています。認証トークンは、別の Web サイトからクエリ文字列内の URL を介して渡されます。このために、私は1つのオーバーロードを持っています
MembershipProvider.Validate(string authenticationToken)
, 、実際にユーザーを検証しています。この場合は使用できません ログイン制御. 。さて、同じものをどのように使用できますかMembershipProvider
実際に使用せずにユーザーを検証するには、 ログイン制御?電話してみましたValidate
手動で行いますが、これではユーザーはサインインしません。
これが私が使用しているコードスニペットです
if (!string.IsNullOrEmpty(Request.QueryString["authenticationToken"])) {
string ticket = Request.QueryString["authenticationToken"];
MyMembershipProvider provider = Membership.Provider as MyMembershipProvider;
if (provider != null) {
if (provider.ValidateUser(ticket))
// Login Success
else
// Login Fail
}
}
解決
検証が成功したら、FormsAuthentication.Authenticate を呼び出してユーザーをサインインする必要があります。 http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.authenticate.aspx
編集:それは FormsAuthentication.SetAuthCookie です。http://msdn.microsoft.com/en-us/library/twk5762b.aspx
また、ユーザーを行きたい場所にリダイレクトするには、次のように呼び出します。FormsAuthentication.RedirectFromLoginPage: http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.redirectfromloginpage.aspx
他のヒント
独自に設定することもできます FormsAuthenticationTicket
検証が成功した場合。
このようなもの;
if (provider != null) {
if (provider.ValidateUser(ticket)) {
// Login Success
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
1, //version
someUserName, //name
DateTime.Now, //issue date
DateTime.Now.AddMinutes(lengthOfSession), //expiration
false, // persistence of login
FormsAuthentication.FormsCookiePath
);
//encrypt the ticket
string hash = FormsAuthentication.Encrypt(authTicket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);
Response.Cookies.Add(cookie);
Response.Redirect(url where you want the user to land);
} else {
// Login Fail
}
}
認証情報を Cookie として直接保存する場合は正しいです。ただし、強力なハッシュ関数を使用します (例:MD5 + SHA1) は優れており安全です。ちなみに、セッション (これも単なるハッシュ Cookie) を使用する場合は、それに認証情報を添付できます。