문제

이 web.config와 같은 asp.net에서 Windows 인증을 사용할 때 어떻게 로그 아웃합니까?

<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를 사용하여 사용자를 로그 아웃 할 수 있습니다. (참고 : 브라우저를 닫는 것은 필요하지 않지만 사용자가 비 EIE 브라우저를 사용할 수 있으므로 권장합니다).

사용자가 "아니오"를 클릭하여 브라우저를 닫으면 인증이 필요한 사이트의 페이지에 액세스하려고 시도하면 사용자에게 사용자 이름/비밀번호가 표시됩니다.

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

이 코드는 SharePoint의 Signout.aspx 페이지에서 가져 왔습니다.

Windows 인증은 Windows 인증 토큰을 전달하여 IIS 수준에서 작동합니다. 인증은 IIS 수준에서 발생하므로 실제로 응용 프로그램 코드에서 로그 아웃 할 수 없습니다. 그러나 문제에 대한 답이있는 것 같습니다. 여기. 이는 두 번째 질문이며 본질적으로 양식 인증 및 Logonuser 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에 로그인 한 모든 것에서 귀하를 기록합니다. 그것은 사파리에서 일종의 작동하지만 사파리는 피싱 경고를 던졌습니다. 오페라에서는 작동하지 않습니다.

    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 기본 인증을 사용할 때 사용자를 로그인합니다

기본적으로 유효하지 않은 자격 증명으로 서버에 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");
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top