ASP.NET Identity + Windows Authentication (Mix mode - Forms + Windows)
I have tried my best to search the web before asking this question. I've seen similar questions on stackoverflow, however, none has been answered satisfactorily for a long time now. This is one more attempt to get this recurring question answered.
The Problem
How to build an ASP.NET MVC 5 website which uses "Windows Auth" for Intranet users and "Forms Auth" for Internet users? We'd like to accomplish this using ASP.NET Identity. Moreover, we don't want to use Active Directory Groups for authorization. For Intranet users, we want to authenticate them using Active Directory and then fall back to ASP.NET Identity to manage their roles and other profile data.
It'll be nice if we don't ask the end user to choose auth method. The web app should log in intranet users seamlessly. They shouldn't even know that there is a login screen. Likewise, the internet users shouldn't be asked to enter their domain credentials. They should see form based login screen right away.
Is there any recommended way of solving this? Or could you comment if any of the following are proper solutions?
http://world.episerver.com/blogs/Dan-Matthews/Dates/2014/8/Mixing-Forms-and-Windows-Authentication/
https://github.com/MohammadYounes/MVC5-MixedAuth
FYI This is 2004 article, may not be helpful now: https://msdn.microsoft.com/en-us/library/ms972958.aspx
IIS 구성
전체 사이트에 대해 IIS에서 익명 인증 상태를 사용하도록 설정하고 루트 디렉터리 아래의 일부 폴더(예: /Windows Login)에 대해 Windows 인증을 사용하도록 설정합니다.이 폴더에 xx 파일(WebForms 프로젝트용)을 배치하거나(MVC 프로젝트용) ApiController를 만듭니다.
사이트설정
로그인 페이지에서 "Windows/ActiveDirectory 계정으로 로그인" 버튼 추가 (일반적인 방법과 유사하게 트위터, 페이스북, Gmail 등으로 로그인)사용자가 이 버튼을 누르면 Windows 인증이 필요한 /Windows Login 폴더의 페이지나 컨트롤러로 리디렉션됩니다.사이트에서 Single Sign-On 기능을 사용하는 경우 해당 페이지나 컨트롤러에서 찾고, 그렇지 않은 경우 Windows 사용자를 위해 세션을 저장합니다.사용자가 해당 페이지나 컨트롤러에 액세스한 경우 이미 Windows 사용자로 인증된 상태였습니다.
가능한 방법 중 하나는 IIS에서 두 개의 사이트를 만들 수 있지만 사이트 원본이 있는 동일한 대상 폴더를 갖는 것입니다.첫 번째 사이트는 Windows Authentication(윈도우 인증) 모드를 활성화하고 80 포트에 바인딩하는 내부 사용자를 위한 사이트이고, 두 번째 사이트는 Anonymous(익명) 모드를 활성화하고 8080 포트에 바인딩하는 외부 사용자를 위한 사이트입니다.그런 다음 방화벽에서 로컬 네트워크 또는 VPN 내에서 들어오는 모든 요청이 포트 80의 로컬 IIS 서버로 리디렉션되고 인터넷에서 들어오는 모든 요청이 IIS 서버의 포트 8080으로 리디렉션되도록 NAT을 구성해야 합니다.
이를 지칭하는 용어가 혼합 모드 인증입니다.나는 이것을 여러 번 했습니다.메인 사이트만 수정하면 됩니다.제가 한 방법은 이렇습니다.
메인 MVC 사이트를 그대로 유지하되 Windows Auth에서 Anonymous vs.로 실행합니다.
내부 사이트
리디렉션 URL 사이트 만들기: Active Directory에서 사용자 ID를 가져올 수 있도록 이 사이트를 Window Auth로 설정합니다.사용자에게 이 URL을 제공하거나 인트라넷에서 클릭하는 링크로 만듭니다.그런 다음 이 사이트에서 MVC 사이트에 전화를 걸어 사용자 자격 증명(로그인 ID)을 전달합니다.
a. 이 작업은 URL의 암호화된 문자열이나 쿠키의 암호화된 값을 통해 수행할 수 있습니다.유효기간/시간 값으로 암호화할 수도 있습니다.
b. (양식 인증에서 사용) 해당 사용자 ID로 양식 인증 티켓을 만듭니다.다른 로그인 로직을 실행합니다.다 했어요.
외부 사이트 - 변경 사항이 필요 없습니다.사용자가 있는 그대로 로그인할 수 있도록 합니다.
하나의 URL에서 양식 및 AD 인증을 처리하고 싶으십니까? 저는 WIF의 프레임워크로 thinktecture(claims based auth)를 사용하고 다양한 양식의 인증을 마셜링했습니다.그러나 한 URL에서 로그인 시 사용자를 AD 또는 Forms based에 연결하는 몇 가지 논리를 처리해야 하는 경우 처리해야 합니다.보다 최근의 프로젝트에서는 사용자 계정을 만들 때 사용자 관리에서 이 작업을 처리했습니다(이 계정은 AD of Forms Auth와 연결되어 있었습니다).그런 다음 사용자가 로그인할 때 AD 도메인 이름을 로그인의 일부로 서문을 작성합니다.이를 구현하기 위한 여러 가지 방법이 있습니다. 이 방법은 제가 사용한 것일 뿐입니다.예를 들어 도메인을 필요로 하지 않고 사용자 이름을 사용한 다음 사용자 이름을 기반으로 AD 또는 양식 플래그를 확인하고 그에 따라 인증을 처리합니다.
편집 질문을 다시 읽을 때 업데이트만 하면 됩니다.인터넷 사용자와 인트라넷 사용자가 같습니까?그렇다면 전반적으로 양식 기반의 인증을 진행하고 AD와 무관하게 제품 DB에서 사용자를 관리하면 됩니다.동일한 경우 도메인 이름을 사용자 이름 앞에 붙여 로그인할 수 있습니다.당신이 AD에만 의존하고 싶다면.
얼마 전에 전 직장에서 개념 증명을 했었기 때문에 세부 사항이 모호하고 참고할 만한 코드가 없습니다...
요구사항은 다음과 같습니다.
- 내부(LAN) 및 외부(인터넷) 액세스를 위한 단일 URL
- 도메인 사용자와 외부(비AD) 사용자의 두 가지 유형의 사용자
- 내부 및 외부 도메인 사용자를 위한 Windows 인증
- iPad 사용 시 도메인 로그온 세부 정보 입력 기능(윈도우즈 인증 없음)
제가 생각해낸 솔루션의 핵심 아이디어는 Active Directory 그룹 정책을 사용하여 http request header user agent에 사용자 지정 문자열을 추가했다는 것입니다. 내용은 중요하지 않습니다. 사실 우리는 긴 임의 문자열의 문자를 사용했습니다.
https://technet.microsoft.com/en-us/library/cc770379.aspx
그런 다음 사이트의 랜딩 페이지에서 이를 확인하고 발견된 경우 AD 계정을 확인한 window auth가 ASP를 채운 가상 디렉토리로 리디렉션됩니다.NET 인증 토큰을 홈 페이지로 리디렉션했습니다.
사용자 지정 헤더가 없으면 일반 로그인 양식만 표시됩니다.
도메인 사용자가 Windows가 아닌 장치(iPad)에서 사이트에 액세스한 경우 일반 로그인 정보를 사용할 수 있도록 AD 전자 메일/비밀번호 검사를 일반 로그인 양식에 추가하는 것뿐이었습니다.
서버에 웹 사이트 코드를 입력하고 두 개의 개별 웹 사이트에 로보카피한 후 web.config를 구성하여 인증 변경 사항을 처리하는 것이 좋습니다.(하나는 익명으로, 다른 하나는 윈도우 인증으로 설정됩니다.)
이것은 다른 방법들처럼 멋지지는 않지만 비교적 고통이 없습니다.두 개의 사이트가 있지만 내용(web.config 제외)은 동일합니다.
언급URL : https://stackoverflow.com/questions/28398991/asp-net-identity-windows-authentication-mix-mode-forms-windows
'programing' 카테고리의 다른 글
자바스크립트 종속성 관리: npm vs. bower vs. volo (0) | 2023.09.08 |
---|---|
Spring Security - 토큰 기반 API 인증 및 사용자/비밀번호 인증 (0) | 2023.09.08 |
iPhone Provisioning Portal에서 App ID를 제거하는 방법 (0) | 2023.09.08 |
아직 존재하지 않는 InnoDB 행을 잠그려면 어떻게 해야 합니까? (0) | 2023.09.08 |
여러 열을 mysql의 고유 식별자로 사용 (0) | 2023.09.08 |