programing

요청 설정 방법.양식을 사용하지 않을 때 true로 인증됨인증.로그인 페이지에서 리디렉션하시겠습니까?

lastmoon 2023. 8. 15. 11:26
반응형

요청 설정 방법.양식을 사용하지 않을 때 true로 인증됨인증.로그인 페이지에서 리디렉션하시겠습니까?

양식 인증을 사용하고 있으며 인증을 위해 서버에 Aajx 요청을 보냅니다.json 결과를 바탕으로 고객은 어디로 가야 할지, 무엇을 해야 할지 결정합니다.양식을 사용하지 않는 이유입니다.인증.Ajax/json 응답을 방해하지 않도록 로그인 페이지에서 리디렉션합니다.

이 경우 요청합니다.IsAuthenticated는 구성원 자격으로 사용자를 검증한 후에도 false를 반환합니다.사용자 확인.그런 다음 쿠키를 설정합니다.

FormsAuthentication.SetAuthCookie(username, false);

두 번째 매개 변수인 영구 쿠키는 거짓이지만 쿠키는 브라우저 세션에서 여전히 유효합니다.

요청하는 방법을 알고 있습니다.양식을 사용하지 않고 인증된 작업입니까?인증.로그인 페이지에서 리디렉션하시겠습니까?

요청에 대한 현재 보안 주체를 업데이트해야 합니다.전화할 때Response. Redirect(...)새 요청이 수행되고 보안 주체가 다시 초기화되고 요청됩니다.IsAuthenticated는 사용자의 경우 true를 반환합니다.FormsAuthentication.RedirectFromLoginPage내부 전화Response. Redirect(...)다음과 같이 현재 요청에 대한 보안 주체를 수동으로 갱신할 수 있습니다.

public void RenewCurrentUser()
{
    System.Web.HttpCookie authCookie =
        System.Web.HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
    if (authCookie != null)
    {
        FormsAuthenticationTicket authTicket = null;
        authTicket = FormsAuthentication.Decrypt(authCookie.Value);

        if (authTicket != null && !authTicket.Expired)
        {
            FormsAuthenticationTicket newAuthTicket = authTicket;

            if (FormsAuthentication.SlidingExpiration)
            {
                newAuthTicket = FormsAuthentication.RenewTicketIfOld(authTicket);
            }
            string userData = newAuthTicket.UserData;
            string[] roles = userData.Split(',');

            System.Web.HttpContext.Current.User =
                new System.Security.Principal.GenericPrincipal(new FormsIdentity(newAuthTicket), roles);
        }
    }
}

양식 인증.SetAuthCookie

방법 제공된 사용자 이름에 대한 인증 티켓을 만들어 응답의 쿠키 컬렉션 또는 쿠키 없는 인증을 사용하는 경우 URL에 추가합니다.

참조: msdn

양식 인증 제어 흐름을 확인합니다.인증 쿠키는 응답 쿠키 컬렉션으로 설정되며 http 프로토콜 수준에서 확인할 수 있어야 합니다(예: FireCookie 또는 Fiddler2를 사용하여 확인).

구성원 자격은 사용자 이름/암호만 확인합니다.회원 자격도, 회원 자격도 없습니다.SetAuthCookie()현재 요청을 수정합니다.그들은 쿠키를 발신자에게 다시 보낼 것으로 예상하고, 다음 요청은 다음과 같은 속성입니다.IsAuthenticatedtrue로 반환됩니다.

사용자 정의를 사용하여 이러한 자동 프로세스를 재정의하고 확장할 수 있습니다.IIdentity그리고.IPrincipal필요한 경우 인증 이벤트에 연결합니다.

ASP와 함께 양식 인증 사용에 대해서도 살펴보십시오.NET AJAX

POST 후 리디렉션하는 것이 최선의 방법이며 올바른 솔루션으로 간주되어야 합니다.

경우에 따라 인증 요청 범위 내에서 사용자가 인증되었는지 여부를 확인해야 할 수 있습니다(예: 인증이 수행된 후 다른 요청과 공유된 추가 로직을 실행하는 경우).

이 경우 요청 값을 재설정할 수 있습니다.다음 코드로 인증됨:

// set the forms auth cookie
FormsAuthentication.SetAuthCookie(username, createPersistentCookie);

// reset request.isauthenticated
var authCookie = System.Web.HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
    FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
    if (authTicket != null && !authTicket.Expired)
    {
        var roles = authTicket.UserData.Split(',');
        System.Web.HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(new FormsIdentity(authTicket), roles);
    }
 }

여기 게시물 참조: http://abadjimarinov.net/blog/2010/01/24/RenewUserInTheSameRequestInAspdotNET.xhtml

우리는 이것을 간단하게 사용할 수 있습니다.

양식 인증.SetAuthCookie(사용자 이름, true);

언급URL : https://stackoverflow.com/questions/2105391/how-to-set-request-isauthenticated-to-true-when-not-using-formsauthentication-re

반응형