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
'IT' 카테고리의 다른 글
두 NSDate 비교 및 시간 성분 무시 (0) | 2023.08.21 |
---|---|
Backbone.js를 사용하여 수집 폴링 (0) | 2023.08.21 |
Powershell을 통해 Windows 기능을 활성화하는 방법 (0) | 2023.08.21 |
결과 쿼리에서 개수(*) 선택 (0) | 2023.08.21 |
c# 및 excel 자동화 - 실행 중인 인스턴스 종료 (0) | 2023.08.21 |