IT

ASP.NET 윈도우즈 인증 로그아웃

itgroup 2023. 8. 21. 21:06
반응형

ASP.NET 윈도우즈 인증 로그아웃

ASP에서 Windows 인증을 사용할 때 로그아웃하는 방법은 무엇입니까?이 web.config와 같은 NET?

<authentication mode="Windows" />

저는 이미 다음을 시도했지만 실패했습니다.리디렉션되지만 사용자를 로그아웃하지는 않습니다.

void logoutButton_Click(object sender, EventArgs e) {
    HttpContext.Current.Session.Clear();
    HttpContext.Current.Session.Abandon();
    ViewState.Clear();
    FormsAuthentication.SignOut();
    Response.Redirect("/");
}

배경 정보:

로컬 파일에 액세스하려면 Active Directory를 사용하여 ID를 가장해야 하므로 Windows 인증을 사용해야 합니다.그리고 양식 인증을 사용하여 가장할 수 없습니다. 왜냐하면HttpContext.Current.User.Identity그렇지 않을 것입니다WindowsIdentity양식 인증을 사용하여 가장

"Windows" 인증확인을 사용할 때 서버측 로그아웃 단추가 작동하지 않습니다.로그아웃 단추를 누르거나 사용자의 브라우저를 닫으려면 "양식" 인증확인을 사용해야 합니다.

IE 브라우저의 경우에만 Windows 인증을 사용하는 경우 다음 Javascript를 사용하여 사용자를 로그아웃할 수 있습니다.(참고: 브라우저를 닫을 필요는 없지만 사용자가 IE 브라우저가 아닌 브라우저를 사용하고 있을 수 있으므로 권장합니다.)

사용자가 "아니오"를 눌러 브라우저를 닫을 경우, 인증확인이 필요한 사이트의 페이지에 액세스하려고 하면 사용자 이름/비밀번호를 입력하라는 메시지가 나타납니다.

try {
   document.execCommand("ClearAuthenticationCache");
}
catch (e) { }
window.close();

이 코드는 쉐어포인트의 Signout.aspx 페이지에서 가져온 것입니다.

Windows 인증은 Windows 인증 토큰을 전달하여 IIS 수준에서 작동합니다.IIS 수준에서 인증이 수행되므로 응용 프로그램 코드에서 실제로 로그아웃할 수 없습니다.하지만 여기에 당신의 문제에 대한 답이 있는 것 같습니다.이 질문은 두 번째로 다루어진 질문이며 기본적으로 양식 인증 및 로그온 사용자 Windows API 사용과 관련이 있습니다.

Windows 인증을 사용하는 SharePoint 애플리케이션이 있어서 15분 후에 자동 로그아웃해야 했습니다.코드를 몇 개 섞었더니 결과가 나왔습니다.IE에서 제대로 작동합니다.

<script type="text/javascript">
var t;
window.onload = resetTimer;
document.onmousemove = resetTimer;
document.onkeypress = resetTimer;

function logout() {

    try {
        document.execCommand("ClearAuthenticationCache");
        window.location.href = window.location.protocol.replace(/\:/g, '') + "://" + window.location.host + "/_layouts/customlogin14.aspx";
    }
    catch (e) { }

}

function resetTimer() {
    window.clearTimeout(t);
    t = window.setTimeout(logout, 900000);
} 

이 코드들을 당신의 마스터 페이지에 넣으면, 15분의 유휴 시간 후에 당신은 로그인 페이지를 볼 것입니다.이것이 도움이 되기를 바랍니다.

IE와 Firefox 모두에서 JavaScript를 사용하여 작동하지만 IE에 로그인한 모든 항목에서 로그아웃됩니다.Safari에서 작동하지만 Safari는 피싱 경고를 표시합니다.오페라에서는 작동하지 않습니다.

try {
    if (document.all) {
        document.execCommand("ClearAuthenticationCache");
        window.location = "/";
    } else {
        window.location = "http://logout:logout@example.com";
    }
} catch (e) {
    alert("It was not possible to clear your credentials from browser cache. Please, close your browser window to ensure that you are completely logout of system.");
    self.close();
}

내가 본 최고의 답변은 관련 StackOverFlow 질문에서 찾을 수 있습니다.

IE의 ClearAuthenticationCache에 해당하는 브라우저가 있습니까?

그리고.

HTTP Basic 인증확인을 사용할 때 사용자 로그아웃

기본적으로 잘못된 자격 증명을 가진 AJAX 요청을 서버로 전송하고 서버가 이를 수락하도록 해야 합니다.

이 문제로 많은 어려움을 겪었지만, 아래는 작동하는 코드입니다. 누군가 유용하게 사용할 수 있기를 바랍니다.

foreach (var cookie in Request.Cookies.Keys)
{
    Response.Cookies.Delete(cookie);
}


await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);


Response.Cookies.Append("EdgeAccessCookie", "", new Microsoft.AspNetCore.Http.CookieOptions()
{
    Path = "/",
    HttpOnly = true,
    SameSite = SameSiteMode.Lax, Expires = DateTime.Now.AddDays(-1)
});


Response.Redirect("https://adfs.[sitename].com/adfs/ls?wa=wsignout1.0");

auth 양식을 사용해야 하지만 다음과 같은 양식에서 ldap windows 사용자 계정을 사용할 수 있습니다.

using(PrincipalContext pc = new PrincipalContext(ContextType.Domain, "YOURDOMAIN"))
{
    // validate the credentials
    bool isValid = pc.ValidateCredentials("myuser", "mypassword");
}

언급URL : https://stackoverflow.com/questions/1067263/asp-net-windows-authentication-logout

반응형