Windows 인증 또는 양식 인증을 통해 Active Directory 또는 SQL에 인증하는 ASP.NET 애플리케이션

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

문제

여러 형태의 인증이 필요한 애플리케이션을 작성하는 중입니다.

애플리케이션은 Active Directory에 대한 인증을 지원해야 하지만 사용자가 Active Directory에 있지 않은 경우 SQL 멤버 자격 공급자로 장애 복구할 수 있어야 합니다.사용자 이름은 Active Directory 사용자 이름과 형식이 다르기 때문에 제공된 사용자 이름을 기반으로 코드에서 SQL 공급자에 대한 실패를 처리할 수 있습니다.

이것이 가능합니까?즉, 멤버십을 사용하고 ActiveDirectoryMembershipProvider와 SqlMembershipProvider를 함께 사용할 수 있습니까? 아니면 직접 사용해야 합니까?

또 다른 추가 복잡성은 Windows 인증을 기반으로 내부 사용자를 AD에 자동으로 인증하고 싶지만 내부 네트워크에 없는 사용자나 SQL 공급자를 사용하는 사용자에 대해서는 양식 인증을 사용한다는 것입니다.

이들은 별도의 서버일 가능성이 높으며 하나는 내부이고 다른 하나는 외부이므로 데이터 복제를 파악하고 AD 사용자가 외부 서버에 접속할 경우 AD 사용자를 인증하는 방법을 파악하기 위해 많은 계획을 세웠습니다.

이 길을 시작하면서 어떤 생각이 떠오르는지 궁금합니다.내가 하고 싶은 일이 내가 직접 하지 않고도 가능합니까, 아니면 이것들을 하나로 묶을 수 있는 방법이 있습니까?


답장을 보내 주셔서 감사합니다.

내가 원래 요청한 이유는 약 7년 전에 IIS를 사용하여 인증한 다음 자격 증명을 Lotus Domino Server Web App에 다시 전달할 수 있었기 때문에 이 특정 senerio를 작동시킬 수 있었기 때문입니다.사용자가 Windows 인증/ISS를 통해 인증되지 않은 경우 Domino가 인증을 처리합니다.이것이 제가 여기서 하려고 했던 일이었지만 실제로 IIS에서 작동하게 만드는 방법을 생각할 수 없었습니다.

나머지 답변에 관해서는 제가 가야 할 길을 가고 있다고 생각합니다.나는 이것을 곰곰이 생각해 보고 머리 속으로 많이 던졌습니다.어쨌든 외부 서버의 데이터에 대한 액세스가 제한되기 때문에 두 서버의 애플리케이션은 다소 다릅니다.이미 많은 것이 달라질 것이라는 사실을 고려하면 이를 두 개의 애플리케이션으로 처리하여 어쨌든 동일한 애플리케이션에서 두 가지 유형의 인증을 사용할 필요성을 무효화할 수 있습니다.

나는 이미 외부 서버에 대한 자체 인증/로그인 창을 작성하는 아이디어를 가지고 놀고 있으며, 사용자가 외부 서버에서 AD 자격 증명을 사용하여 로그인을 시도하면 이를 감지하고 내부 서버로 리디렉션할 수 있습니다. 섬기는 사람.로컬 네트워크에 없거나 VPN이 연결되어 있지 않으면 액세스할 수 없습니다.이 부분은 아직 갈 길이 멀기 때문에 잘 모르겠습니다.

추가로 생각해 볼 점 - 보안 문제를 일으키지 않고 AD 자격 증명을 사용하여 외부 서버에서 SQL 데이터베이스에 사용자를 인증할 수 있도록 충분한 양의 AD를 SQL 데이터베이스로 가져올 수 있는 방법이 있습니까?내가 생각하는 것을 명확하게 입력하길 바랍니다....

다시 한 번 감사드립니다!

도움이 되었습니까?

해결책

이것이 제가 비슷한 상황을 처리한 방식입니다. 이 정보:

  1. 양식 인증을 사용하도록 애플리케이션을 구성했습니다.
  2. LoginUrl을 WinLogin.aspx라는 페이지로 설정합니다.
  3. WinLogin.aspx에서 Request.ServerVariables["LOGON_USER"]를 사용하여 사용자 이름을 가져온 다음 FormsAuthentication.RedirectFromLoginPage(authorizedUserName, false)를 호출하여 로그인합니다.이 시점에서도 Active Directory를 수동으로 확인할 수 있을 것 같습니다.
  4. Login.aspx라는 페이지로 리디렉션되는 HTML 페이지를 만듭니다.
  5. Login.aspx는 표준 사용자 이름/비밀번호 로그인입니다.
  6. IIS에서는 전체 사이트에서 통합 인증 및 익명을 활성화하지만 WinLogin.aspx에 대한 익명 액세스는 거부합니다.
  7. IIS에서 401 오류를 3단계에서 만든 페이지로 설정합니다.

기본적으로 인증되지 않은 사용자가 사이트에 접속하면 WinLogin.aspx로 리디렉션됩니다.익명이 해제되어 있으므로 통합보안에서 확인을 합니다.통과하면 WinLogin의 사용자 지정 코드가 실행될 수 있습니다.통합보안검사에 실패하면 401에러가 발생합니다.사용자 정의 401 페이지는 사용자가 사용자 이름과 비밀번호를 사용하여 SQL 공급자에 로그인할 수 있는 Login.aspx로 리디렉션됩니다.

다른 팁

내가 아는 한, 웹 응용 프로그램은 Windows 인증이나 양식 인증 중 하나를 사용하도록 구성되어 있지만 둘 다를 사용하지는 않습니다.따라서 다른 사용자에게 사용자 이름/비밀번호를 입력하도록 요구하면서 내부 사용자를 자동으로 인증하는 것은 불가능하다고 생각합니다.

사용자 지정 공급자를 사용하여 양식 인증을 통해 Active Directory 또는 SQL 사용자 저장소에 인증할 수 있습니다.그러나 AD 사용자는 여전히 사용자 이름과 비밀번호를 입력해야 합니다.이 두 가지 방법을 결합한 적은 없지만 양식 인증을 사용하여 한 번에 두 소스에 대해 인증했습니다.

그렇다면 시스템의 "유연성"을 줄이는 것을 고려해 보는 것이 좋을 것 같습니다.외부 연결 서버와 내부 연결 서버가 있는 경우 응용 프로그램의 각 복사본에서 공급자 구성을 변경하여 다른 소스에 대응할 수 있습니다.그런 다음 Windows(자동) 인증을 사용하도록 내부 인증을 구성하고 양식 인증을 사용하도록 외부 인증을 구성할 수 있습니다.

IMHO, 내부 사용자는 외부 서버를 사용하여 애플리케이션에 액세스해서는 안 된다고 생각합니다.그렇다면 AD 계정과 완전히 분리되어 SQL에 저장된 사용자 계정이 있어야 합니다.기본적으로 누군가가 외부에서 애플리케이션에 액세스하면 물리적 위치에 관계없이 외부 사용자로 행동합니다.

ActiveDirectoryMembershipProvider 및 SqlMembershipProvider를 사용할 수 있지만 이를 위해서는 로그인 컨트롤 대신 고유한 코드를 사용하여 로그온 페이지를 디자인해야 합니다.

혼합 인증(Windows 및 Forms)에 대해서는 내가 아는 한 IIS 7에서만 쉽고 깔끔하게 사용할 수 있습니다.자세한 내용은 이 게시물을 참조하세요.

http://mvolo.com/blogs/serverside/archive/2008/02/11/IIS-7.0-Two_2D00_Level-Authentication-with-Forms-Authentication-and-Windows-Authentication.aspx

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