기본 방법 대신 인증 쿠키를 수동으로 만들려면 어떻게 해야 합니까?
사용.FormsAuthentication
우리는 다음과 같은 코드를 작성합니다.
if (IsValidUser())
{
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
FormsAuthentication.RedirectFromLoginPage(userName, createPersistentCookie);
}
기록하는 대신 수동으로 인증 쿠키를 만드는 방법
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie)
?로그인 페이지의 리디렉션 URL을 쓰는 대신 문자열 변수에 저장하려면 어떻게 해야 합니까?
FormsAuthentication.RedirectFromLoginPage(userName, createPersistentCookie)
?
여기 있어요.ASP.NET은 양식에 내장된 상위 수준 메소드를 사용할 때 이 문제를 해결합니다.인증확인, 그러나 낮은 수준에서는 인증확인 쿠키를 작성해야 합니다.
if (Membership.ValidateUser(username, password))
{
// sometimes used to persist user roles
string userData = string.Join("|",GetCustomUserRoles());
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1, // ticket version
username, // authenticated username
DateTime.Now, // issueDate
DateTime.Now.AddMinutes(30), // expiryDate
isPersistent, // true to persist across browser sessions
userData, // can be used to store additional user data
FormsAuthentication.FormsCookiePath); // the path for the cookie
// Encrypt the ticket using the machine key
string encryptedTicket = FormsAuthentication.Encrypt(ticket);
// Add the cookie to the request to save it
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
cookie.HttpOnly = true;
Response.Cookies.Add(cookie);
// Your redirect logic
Response.Redirect(FormsAuthentication.GetRedirectUrl(username, isPersistent));
}
당신이 왜 여기서 관습적인 일을 하고 싶어하는지 모르겠습니다.사용자 데이터가 저장되는 위치와 사용자 인증 방법의 구현을 변경하려면 사용자 정의를 생성하는 것이 좋습니다.MembershipProvider
자체 솔루션을 굴리고 인증 쿠키를 조작하는 것은 소프트웨어에 보안 취약점이 발생할 가능성이 높다는 것을 의미합니다.
저는 당신의 파트 2를 이해하지 못합니다.양식만 호출하면 됩니다.인증.사용자가 로그인으로 되돌아갔을 때 액세스하려는 페이지로 되돌리려면 GetRedirectUrl.여기서 원하는 작업을 수행하지 않으면 원하는 경우 구성에 저장된 URL로 리디렉션합니다.
양식 읽기인증 쿠키, 일반적으로 다음을 후크합니다.AuthenticateRequest
HttpModule 또는 Global.asax의 이벤트 및 사용자 설정IPrinciple
맥락.
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if(authCookie != null)
{
//Extract the forms authentication cookie
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
// If caching roles in userData field then extract
string[] roles = authTicket.UserData.Split(new char[]{'|'});
// Create the IIdentity instance
IIdentity id = new FormsIdentity( authTicket );
// Create the IPrinciple instance
IPrincipal principal = new GenericPrincipal(id, roles);
// Set the context user
Context.User = principal;
}
}
답변 이 게시물에 대한 다운 투표수 업데이트, 사용자 정보로 쿠키를 만드는 적절한 방법은 다음과 같습니다.
로그인 페이지 로드 시 쿠키 유효성 검사,
if (HttpContext.Current.User.Identity.IsAuthenticated)
인증된 사용자 로그인 중 쿠키 생성,
FormsAuthentication.SetAuthCookie(txtUserName.Text.Trim(), true);
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1,
txtUserName.Text.Trim(),
DateTime.Now,
(chkRemember.Checked) ? DateTime.Now.AddHours(6) : DateTime.Now.AddHours(2),// Specify timelimit as required
true,
string.Empty,
FormsAuthentication.FormsCookiePath);
string encryptedTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
cookie.Expires = (chkRemember.Checked) ? DateTime.Now.AddHours(6) : DateTime.Now.AddHours(2);
cookie.HttpOnly = true;
Response.Cookies.Add(cookie);
아래는 거부된 답변 - 쿠키에 암호화된 암호를 추가하는 이유입니다.
쿠키를 만드는 다른 방법,
HttpCookie toolCookie = new HttpCookie("xyz");
toolCookie["UserName"] = userName;
toolCookie["Password"] = StringCipher.Encrypt(password, "#!");
toolCookie.Expires = DateTime.Now.AddMinutes(chkRemember.Checked ? 30 : -30);
Request.Cookies.Add(toolCookie);
기존 쿠키 세부 정보 가져오기
HttpCookie user = Request.Cookies["xyz"];
if(user != null)
{
string username = user["UserName"];
string password = user["Password"] != null ? StringCipher.Decrypt(user["Password"], "#!")
}
여기서 데이터 보안은 정적 클래스입니다.
언급URL : https://stackoverflow.com/questions/7217105/how-can-i-manually-create-a-authentication-cookie-instead-of-the-default-method
'programing' 카테고리의 다른 글
Docker-Compose를 사용할 때 Django 데이터베이스 마이그레이션을 어떻게 수행합니까? (0) | 2023.09.09 |
---|---|
도커 레지스트리 v2에서 이미지 목록을 가져오는 방법 (0) | 2023.09.04 |
장고 형태의 CSS 스타일링 (0) | 2023.09.04 |
어떻게 쿼리가 각 행 MySQL에 대해 2개의 셀을 곱할 수 있습니까? (0) | 2023.09.04 |
HikariPool-1 - 연결을 사용할 수 없습니다. 매우 작은 로드 서버의 경우 요청이 30000ms 이후에 시간 초과되었습니다. (0) | 2023.09.04 |