2

웹 응용 프로그램 내에서 클라이언트 시스템의 사용자에 대한 활성 디렉토리 자격 증명을 가져올 수 있습니까?웹 응용 프로그램의 클라이언트 컴퓨터에서 AD 자격 증명을 가져 오는 방법은 무엇입니까?

명확히하기 위해 고객의 인트라넷에서 호스팅되는 웹 응용 프로그램을 디자인하고 있습니다.

응용 프로그램 사용자는 응용 프로그램에 액세스 할 때 자격 증명을 묻는 메시지가 나타나지 않고 대신 사용자 상호 작용없이 자동으로 클라이언트 컴퓨터에 로그온 한 사용자의 자격 증명을 가져와야합니다.

+0

어떤 웹 응용 프로그램 프레임 워크입니까? ASP.NET? 이것은 관련성이 있습니다. –

답변

1

아마도 .NET에는 더 직접적인 방법이 있지만 PHP에서는 Active Directory 서버에 LDAP 서버로 액세스합니다.

서버를 조정하기 위해 어떤 조정이 필요한지 잘 모르겠습니다. 나는 서버를 설정하지 않았고, 그냥 쿼리했다. PHP 사용을 제안하지 않습니다. LDAP를 다루기 쉽고 Active Directory에 직접 연결하려고하는 것이 더 쉽습니다.

5

물론입니다. 이것은 특히 인트라넷 응용 프로그램에 유용합니다.

환경을 지정하지 않았으므로 .NET이라고 가정하겠습니다.하지만 가능한 유일한 방법은 아닙니다.

Active Directory는 LDAP을 사용하여 쉽게 쿼리 할 수 ​​있습니다. .NET을 사용하는 경우 this code example 또는 아래 예제와 같은 작업을 수행 할 수 있습니다. SQL environments에서도 가능합니다.

인증을 처리하기 위해 Windows가 필요한 경우 예를 들어 Windows Authentication에 대한 .NET 웹 앱을 설정할 수 있습니다. 응용 프로그램에 대해 IIS 내에서 turn off Anonymous Logins을 사용해야합니다. 작업이 완료되면 사용자의 Windows 로그온 이름에 액세스하여이를 사용하여 추가 보안 확인을 수행 할 수 있습니다 (예 : AD에서 group/role membership).

또한 Enterprise Library의 Security Application Block과 같은 것을 사용하여 전체적인 작업을 단순화 할 수 있습니다. 여기


짧은 C# 예제입니다 : 당신은 도메인 컨트롤러를 지정할 필요가 없습니다

using System.DirectoryServices; 

/// <summary> 
/// Gets the email address, if defined, of a user from Active Directory. 
/// </summary> 
/// <param name="userid">The userid of the user in question. Make 
/// sure the domain has been stripped first!</param> 
/// <returns>A string containing the user's email address, or null 
/// if one was not defined or found.</returns> 
public static string GetEmail(string userid) 
{ 
    DirectorySearcher searcher; 
    SearchResult result; 
    string email; 

    // Check first if there is a slash in the userid 
    // If there is, domain has not been stripped 
    if (!userid.Contains("\\")) 
    { 
     searcher = new DirectorySearcher(); 
     searcher.Filter = String.Format("(SAMAccountName={0})", userid); 
     searcher.PropertiesToLoad.Add("mail"); 
     result = searcher.FindOne(); 
     if (result != null) 
     { 
      email = result.Properties["mail"][0].ToString(); 
     } 
    } 

    return email; 
} 

(VB.NET here로 변환). DirectorySearcher의 빈/기본 생성자를 수행하면 자동으로 하나를 찾습니다. — 실제로는 the preferred method입니다.

+0

내가 설명하는 것과 비슷한 것을 시도했지만 Active Directory 경로를 지정하지 않아도됩니까? – Geoff

+0

아니요. 그렇지 않으면 로컬 DNS에 요청합니다. 이것은 실제로 선호되는 "확장 가능한"접근 방식입니다. 내 확장/수정 된 답변보기 –

+0

나는 인증이 허용되지 않는다는 것을 이해했다 - 사용자는 통합 인증을 요구할 수도 없다. 이 작업은 가능하지만 특정 조건이 적용되며 웹 브라우저 (IE)에서 일부 설정이 필요합니다. – tvanfosson

0

아니요, 물론 아닙니다. 무작위 웹 앱으로 인해 AD 사용자 이름과 비밀번호를 얻을 수있는 혼란을 상상할 수 있습니까?

이제 사용자 이름을 원한다면 - integated windows auth을 사용하는 경우 REMOTE_USER에 있습니다. Windows auth는 도메인 (또는 신뢰)을 공유한다고 가정하고 사용자를 사이트에 자동 로그인합니다.

편집 : IE는 기본적으로 인트라넷 보안 영역에 인트라넷 사이트를 포함하므로 IWA는 인트라넷 시나리오에서 작동합니다. 또한 시스템 관리자는 GPO를 사용하여 다른 신뢰할 수있는 사이트를 설정할 수 있습니다. Firefox supports NTLM, OperaChrome도 마찬가지입니다. 대체로 인트라넷을 설정하는 것은 나쁜 방법이 아닙니다.

그러나 자격 증명을 얻지 못했습니다.클라이언트와 토큰을 협상하는 것은 IWA를 안전하게 유지하는 것입니다.

+0

원래 포스터는 사이트가 클라이언트 인트라넷에서 호스팅 될 것이라고 언급했습니다. 보안에 관한 귀하의 요점은 논박의 여지가 있습니다. – Nasir

+0

보안은 결코 부끄럽지 않습니다. 인트라넷이 IP 범위로 제한되어 있더라도 여전히 사용하는 사람이 자신이 말하는 사람인지 확인하려고합니다. 신뢰할 수있는 방식으로 브라우저에서 자격 증명을 자동으로 전달할 수있는 유일한 방법은 사이트를 사용자의 신뢰할 수있는 사이트에 두는 것입니다. – tvanfosson

+0

@ nsr81 : 예, OP가 내 답변을 게시 한 지 한 시간 후에 언급했습니다. 당신이 자격 증명을 얻지 못했기 때문에 BTW는 여전히 정답입니다 - 당신은 사용자를위한 토큰을 얻을 수있는 협상 된 해쉬를 얻습니다. –

1

Windows 통합 인증, 사용자는 IE를 사용해야하며 사이트는 사용자의 신뢰할 수있는 사이트에 있어야합니다. 이러한 것들이 사실이라면, IE는 웹 보안 토큰을 웹 사이트에 전달할 것이고, 웹 사이트는 그것을 인증 할 것입니다. 우리는 인트라넷에서 SharePoint를 사용하여이 작업을 수행합니다. 그렇지 않으면 제한된 항목에 액세스하는 데 어려움이 있습니다. 문서를 클릭 할 때마다 메시지가 표시됩니다.

관련 문제