ASP.NET에서 로그인 컨트롤 없이 Custom MembershipProvider 사용
-
09-06-2019 - |
문제
우리는 관습을 가지고 있습니다 MembershipProvider
~에 ASP.NET
.이제 사용자를 검증할 수 있는 2가지 가능한 시나리오가 있습니다.
다음을 통한 사용자 로그인
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)은 훌륭하고 안전합니다.그런데 세션(단순한 해시 쿠키이기도 함)을 사용하는 경우 인증 정보를 첨부할 수 있습니다.