2016-09-08 10 views
0

인트라넷에서 실행되는 단일 페이지 응용 프로그램이 있습니다. 사용자는 Windows 인증 (도메인 사용자)에 의해 인증됩니다. 내가 요청을 보낼 버튼을 클릭하면 다음과 같은 코드를 가진 영문 페이지로 ($의 HTTP, 각도를 사용하여) :asp.net에서 windows 인증 된 사용자의 사용자 이름을 얻는 방법은 무엇입니까?

 string result = "Unknown"; 
     var loggedOnUser = System.Security.Principal.WindowsIdentity.GetCurrent(); 
     if (loggedOnUser != null) { 
      int index = loggedOnUser.Name.LastIndexOf("\\", StringComparison.Ordinal) + 1; 
      result = loggedOnUser.Name.Substring(index); 
     } 
     var json = "{ \"User\" : \"" + result + "\"}"; 
     Response.Clear(); 
     Response.ContentType = "text/json"; 
     Response.Write(json); 
     Response.End(); 

이 코드는 나에게에 등록 된 사용자의 이름을 제공합니다 응용 프로그램 풀. 그다지 놀라운 일이 아니기 때문에 여기에 집중해야 할 필요가 있습니까? 이렇게하는 이유는 자바 스크립트에서 사용자 이름을 사용하여 서버에 대한 다른 호출에서 매개 변수로 보낼 수 있기 때문입니다. 나는 웹을 검색했으며 모두가 로그인 한 사용자 이름을 얻는 것이 큰 보안 침해라고 말합니다. 그리고 저는 그것을 봅니다. 그러나 서버 코드와 관련된 방식으로 완료 될 때 해결 방법이 될 수 있습니까?

제안 사항?

감사합니다. 당신이 다른 호출에서 매개 변수로 사용자 이름을 보내는 경우

+0

에 같이있어? 귀하의 인증은 매 통화마다 발생해야합니다. –

+0

두 번째 메모에서 사이트의 인증 설정은 무엇입니까? 익명의 승인을 허용합니까? –

+0

이것은 보안이 문제가되지 않도록 좋은 의도를 가진 사용자가있는 인트라넷 응용 프로그램입니다. 사용자에게 도메인 사용자 이름을 입력하거나 로그인 양식 또는 이와 유사한 것을 작성하도록 요청할 수 있으며 문제가 해결 될 것입니다. 동료들에게 Windows 도메인 사용자 계정으로 한 번만 로그인하면됩니다. Windows 인증은 IIS에서 설정됩니다. 이제는 익명 액세스가 허용되지 않습니다. 모든 내부 및 방화벽 뒤에서 작동하는 해킹을 수행 할 것입니다. –

답변

1

나는 다른 사람의에 해당 사용자 이름을 교체에서 교육을 사용자가 중지가 무엇 Login 클릭

protected void btnLogin_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      string UserName = ""; 
      string activeDomain = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString(); 
      string strName = HttpContext.Current.User.Identity.Name.ToString(); 


      if (strName == "") 
      { 
       UserName = activeDomain; 
      } 
      else 
      { 
       UserName = strName; 
      } 

      if (UserName == "") 
      { 
       lblMsg.Text = "Invalid Credentials. Please contact administrator!"; 
      } 
      else 
      { 
       LP.UserName = UserName; 
       DataSet dsUserName = LBLL.validate_user(LP); 
       if (dsUserName.Tables[0].Rows.Count > 0) 
       { 
        Session["UserName"] = dsUserName.Tables[0].Rows[0]["userName"].ToString(); 
        Session["entityUID"] = dsUserName.Tables[0].Rows[0]["entityUID"].ToString(); 
        Response.Redirect("~/index.aspx", false); 
       } 
       else 
       { 
        lblMsg.Text = "Invalid Credentials. Please contact administrator!"; 
       } 
      } 
     } 
     catch (Exception ex) 
     { 

     } 
    }