programing

기본 방법 대신 인증 쿠키를 수동으로 만들려면 어떻게 해야 합니까?

bestprogram 2023. 9. 4. 20:31

기본 방법 대신 인증 쿠키를 수동으로 만들려면 어떻게 해야 합니까?

사용.FormsAuthentication우리는 다음과 같은 코드를 작성합니다.

 if (IsValidUser())
 {
      FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
      FormsAuthentication.RedirectFromLoginPage(userName, createPersistentCookie); 
 }
  1. 기록하는 대신 수동으로 인증 쿠키를 만드는 방법FormsAuthentication.SetAuthCookie(userName, createPersistentCookie)?

  2. 로그인 페이지의 리디렉션 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로 리디렉션합니다.

양식 읽기인증 쿠키, 일반적으로 다음을 후크합니다.AuthenticateRequestHttpModule 또는 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