استخدام Custom MembershipProvider دون التحكم في تسجيل الدخول في ASP.NET
-
09-06-2019 - |
سؤال
لقد حصلنا على العرف MembershipProvider
في ASP.NET
.يوجد الآن سيناريوهان محتملان يمكن التحقق من صحة المستخدم:
تسجيل دخول المستخدم عبر
login.aspx
الصفحة عن طريق إدخال اسم المستخدم/كلمة المرور الخاصة به.لقد استخدمت التحكم في تسجيل الدخول وربطها معMyMembershipProvider
.هذا يعمل بشكل جيد تماما.يتم تمرير رمز المصادقة عبر بعض عناوين URL في سلسلة استعلام من مواقع ويب مختلفة.لهذا لدي حمل زائد واحد
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
}
}
أنت على حق في حالة تخزين معلومات المصادقة كملف تعريف ارتباط مباشرة.ولكن باستخدام وظيفة تجزئة قوية (على سبيل المثال.MD5 + SHA1) رائع وآمن.بالمناسبة، إذا كنت تستخدم الجلسات (والتي هي أيضًا مجرد ملف تعريف ارتباط تجزئة)، فيمكنك إرفاق معلومات المصادقة بها.