2009-07-01 6 views
43

이 web.config와 같이 ASP.NET에서 Windows 인증을 사용할 때 어떻게 로그 아웃합니까?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를 사용하여 신원을 가장 할 필요가 있기 때문에 Windows 인증을 사용해야합니다. 그리고 HttpContext.Current.User.IdentityWindowsIdentity이 아니기 때문에 양식 인증을 사용하여 가장 할 수 없습니다. Impersonate using Forms Authentication

+0

결국 폼 인증을 통해 사용자를 가장하는 것처럼 보입니다. http://stackoverflow.com/a/11873754/359765 – bgh

답변

29

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

11

Windows 인증은 Windows 인증 토큰을 전달하여 IIS 수준에서 작동합니다. IIS 수준에서 인증이 발생하기 때문에 실제로 응용 프로그램 코드에서 로그 아웃 할 수 없습니다. 그러나 귀하의 문제에 대한 대답이있는 것 같습니다 here. 두 번째 질문은 폼 인증과 LogonUser Windows API를 사용하여 해결해야하는 문제입니다.

+0

굉장! 그 기사에 대한 링크를 가져 주셔서 감사합니다. 정확히 내가 다른 질문을 원했던 것이다. 제 다른 질문에 그 글을 적어주세요. 나는 그 질문에 답해 줄 것입니다. – Robert

20

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

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

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

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

+0

똑똑! 이것이 IE가 아닌 브라우저에서 예외를 일으키기를 희망했기 때문에 catch 블록에서 IE가 아닌 사용자에게 경고를 표시 할 수있었습니다. FF에는 예외가 있지만 불행히도 Chrome에는 예외가 있습니다. 창문을 닫으면 충분 할까? 확실하지 않다. 빠른 테스트는 크롬과 FF에있을 수 있지만, 위의 스크립트가없는 IE에서는 인증을 취소하기 전에 모든 창을 닫아야한다는 것을 알고 있습니다. –

+1

이 링크에 따르면 위의 명령은 요청한 사이트뿐만 아니라 모든 인증 데이터를 지우는 것이 좋습니다. http://msdn.microsoft.com/en-us/library/ms536979.aspx –

+0

Brilliant! 여기에 설명 된대로 리디렉션하도록 코드를 변경했습니다. - http://stackoverflow.com/questions/12742319/formsauthentication-signout-not-working-for-iis-windows-authentication-op – Jack

3

IE에서 로그인 한 모든 것을 로그 아웃하지만 IE와 Firefox에서 JavaScript를 사용하여 작업하고 있습니다. 사파리에서 일종의 일이지만, 사파리는 피싱 경고를 던집니다. Opera에서 작동하지 않습니다.

 
    try { 
     if (document.all) 
     { 
      document.execCommand("ClearAuthenticationCache"); 
      window.location = "/"; 
     } 
     else 
     { 
      window.location = "http://logout:[email protected]"; 
     } 
    } 
    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(); 
    } 

6

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 분 유휴 시간 후, 마스터 페이지에이 코드를 넣어. 희망이 도움이 누군가가