ASP.NET 응용 프로그램에서 로그인된 Windows 도메인 계정을 어떻게 얻나요?

StackOverflow https://stackoverflow.com/questions/54050

  •  09-06-2019
  •  | 
  •  

문제

우리는 자체 사용자, 역할 및 권한 데이터베이스를 관리하는 ASP.NET 응용 프로그램을 가지고 있으며 최근 Windows 도메인 계정을 보유하기 위해 사용자 테이블에 필드를 추가했습니다.

사용자가 그럴 필요가 없도록 만들고 싶습니다. 육체적으로 우리 애플리케이션에 로그인하는 것이 아니라 현재 로그인된 Windows 도메인 계정 DOMAIN\username을 기반으로 자동으로 로그인됩니다.우리는 자체 User 테이블에 대해 Windows 도메인 계정을 인증하려고 합니다.

이것은 Windows Forms에서 수행할 수 있는 매우 간단한 작업입니다. Web Forms에서 이 작업을 수행할 수 있습니까?

사용자에게 Windows 인증 확인 화면이 표시되는 것을 원하지 않고 시스템에서 로그인을 처리하도록 하고 싶습니다.

설명:우리는 우리 자신의 사용자 정의 Principal 객체를 사용하고 있습니다.

설명:차이가 있는지 확실하지 않지만 IIS7을 사용하고 있습니다.

도움이 되었습니까?

해결책

나는 몇 년 전에 당신이 하고 싶은 일을 거의 정확하게 해냈습니다.나는 그것에 대한 일부 코드를 찾으려고 노력하고 있지만 이전 직장에 있었기 때문에 코드가 집에 있습니다.

내가 사용했지만 나는 기억한다 이 기사 나의 출발점으로.사용자와 LDAP를 실제로 확인할 수 있도록 LDAP 공급자를 설정합니다.LDAP 접근 방식을 시도하는 경우 확인해야 할 한 가지 사항입니다.LDAP를 설정하는 설정 파일에서 LDAP가 모두 대문자인지 확인하십시오. 그렇지 않으면 해결되지 않습니다.

다른 팁

이러한 종류의 통합은 서버 수준에서 이루어지며, 사용자가 로그인하지 않았음을 결정하는 것은 IIS입니다.브라우저가 반응하는 인증 프롬프트를 사용자에게 다시 보내는 것은 IIS입니다.

도메인 로그인을 사용하려면 한 가지 방법밖에 없습니다. 통합 Windows 인증.이는 IIS 서버도 도메인의 일부이고 사용자가 프록시를 통하지 않고 도메인의 일부인 컴퓨터(사용자가 적절하게 로그인한 상태)에서 직접 컴퓨터에 액세스하는 경우에만 작동합니다.

그러나 사용자 정의 주요 개체는 재미와 게임을 만들 수 있습니다.이 유형의 인증은 WindowsPrincipal 및 WindowsIdentity가 됩니다.User 개체를 통해 액세스할 수 있습니다(참조: 어떻게:ASP.NET 2.0에서 Windows 인증 사용)

사용자 정의 역할 때문에 사용자 정의 주체를 원한다고 가정합니까?나는 당신이 두 사람이 잘 플레이할 수 있을지 의심스럽습니다.사용자 정의를 만들 수 있습니다 역할 공급자 데이터 저장소를 보거나 볼 수 있는 것을 볼 수 있습니다. 아담, 프로그램별로 역할을 제공하고 멋진 관리 도구와 함께 제공되는 AD의 확장입니다.

using System.Security.Principal;
...
WindowsPrincipal wp = (WindowsPrincipal)HttpContext.Current.User;

현재 도메인 사용자를 얻으려면.물론 IIS가 Windows 인증을 처리하도록 설정되어 있는지 확인해야 합니다.

이것은 도움이 될 수 있습니다:

WindowsIdentity myIdentity = WindowsIdentity.GetCurrent();

WindowsPrincipal myPrincipal = new WindowsPrincipal(myIdentity);

string name = myPrincipal.Identity.Name;
string authType = myPrincipal.Identity.AuthenticationType;
string isAuth = myPrincipal.Identity.IsAuthenticated.ToString();

string identName = myIdentity.Name;
string identType = myIdentity.AuthenticationType;
string identIsAuth = myIdentity.IsAuthenticated.ToString();
string iSAnon = myIdentity.IsAnonymous.ToString();
string isG = myIdentity.IsGuest.ToString();
string isSys = myIdentity.IsSystem.ToString();
string token = myIdentity.Token.ToString();

부인 성명:Technet 기사에서 이 내용을 얻었으나 링크를 찾을 수 없습니다.

당신이 사용할 수있는 System.Threading.Thread.CurrentPrincipal.

Request.ServerVariables["REMOTE_USER"]

이것은 귀하의 설정에 대해 확인되지 않았지만 얼마 전에 이것을 사용한 것을 기억합니다.

Request.ServerVariables("LOGON_USER")를 사용해 보세요.

이 디렉토리가 익명 사용자를 허용하지 않도록 디렉토리 보안 옵션이 설정된 경우, 검색자가 이 페이지를 방문할 때 사용자 이름과 비밀번호를 묻는 표준 모달 대화 상자가 표시됩니다.Request.ServerVariables("LOGON_USER")는 해당 사용자를 반환합니다.

그러나 사용자 정의 보안 개체를 사용하고 있기 때문에 이 방법은 아마도 작동하지 않을 것입니다.로그온 상자를 피하는 방법을 알아내거나 사이트에서 요청하기 전에 NT 자격 증명을 사이트에 전달할 수 있다면 모든 준비가 완료된 것입니다.

사칭에 대해 생각해 보셨나요?사용자 정의 보안 개체에 사용자의 NT 로그온 자격 증명을 저장한 다음 적절한 경우 코드를 통해 사용자를 가장할 수 있습니다.

http://msdn.microsoft.com/en-us/library/aa292118(VS.71).aspx

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top