DirectoryServices
을 사용하여 사용자를 인증 할 인트라넷 웹 응용 프로그램에 대한 메서드를 만들어야합니다.이 메서드는 기본 도메인이나 사용자가 지정한 것으로 가정합니다. 사용자가 웹 서버와 같은 도메인에와있을 때DirectoryServices를 사용한 도메인 간 인증
사용자가 "username"
및 "password
"또는 "domain\username"
및 "password"
첫 번째 케이스의 형태가 자격 증명을 줄 중 하나를 할 수 사용할 수 있습니다 . 아주 straightfoward 내가 사용하는 코드는 다음과 같습니다
string domain = "";
// Code to check if the username is in form of "domain\user" or "user"
string username = ParseUsername(username, out domain);
if(domain == "")
domain = defaultDomain;
PrincipalContext context = new PrincipalContext(ContextType.Domain, domain, username, password);
bool IsAuthenticated = context.ValidateCredentials(username, password)
은 내가 다른 도메인에 액세스하려고 할 경우에 전화를 결합하기 위해 PrincipalContext 생성자에 사용자 이름과 암호를 전달 로컬 도메인에 대한
. 그만큼 코드가 잘 작동합니다. 그러나 사용자 이름을 통해 지정된 다른 도메인에 대해 확인하려고하면 "서버에 연결할 수 없습니다."오류가 발생합니다.
다른 ContextOptions
(예 : ContextOptions.SimpleBind
또는 ContextOptions.Negotiate
)을 사용해 보았지만 항상 같은 결과가 나타나는 것 같습니다.
응용 프로그램이 단일 도메인 또는 다중 도메인 환경에서 다양한 고객에게 제공되기 때문에이를 구현해야합니다. "원격"도메인의 경우에 지정해야 할 것이 있습니까? 코드는 다양한 환경에 배치되므로 유연해야합니다.
감사
편집 : 나는 순서대로뿐만 아니라 제공하는 다른 기능을 활용 DirectoryServices.AccountManagement
및 PrincipalContext
를 사용하여 할 선호, 지적해야합니다.
또한 내 테스트를 위해 내 Dev 컴퓨터는 10.0.0. * 네트워크에 있고 테스트 대상인 두 번째 도메인은 10.0.1. *입니다. 나는 경로가 있고 모두가 있고 succesfuly ldap 클라이언트를 사용하여 연결할 수 있습니다. 그래서 질문을 왜 내 asp.net 응용 프로그램을 통해 도메인에 연결할 수 없습니다.
보안 제한 사항은 내 첫 번째 추측입니다. 그러나이 메서드의 이전 구현에서는 이전 .NET 2.0 라이브러리의 DirectoryEntry 및 DirectorySearcher를 사용했습니다. 이 경우 호출을 바인드하기 위해 사용자 이름과 암호를 전달해야하므로 이중 홉 문제가 해결됩니다. 이제는 전혀 연결하지 않는 것 같습니다. 가장 큰 차이점은 이제 사용자가 자신이 속한 도메인을 지정할 수 있도록해야한다는 점입니다. –
내가 일한 곳이 새 도메인으로 이전하기로 결정했을 때 비슷한 문제가 발생했습니다. 이전 과정에서 두 도메인을 모두 활성화해야했습니다. 거기에서 나는 신뢰 문제가 있다는 것을 알았지 만 그것에 대한 해결책을 결코 알 수 없었습니다. 대신 WinNT 접근 방식을 사용하여 전체 네트워크에서 userID를 검색하고 해당 객체를 얻은 다음 필요한만큼 조작을 수행했습니다. 또한 WinNT가 실현 가능한지 여부를 확인하기 위해 두 가지 방법 모두에 대한 대기 시간 검사를 수행했으며 괜찮은 선택이라고 판명되었습니다. – gizgok
@NikosSteiakakis 솔루션을 이해하려면 여기에 적어주십시오. – gizgok