통합 Windows 인증 개요
통합 Windows 인증(Integrated Windows Authentication, IWA)은 IIS와 사용자가 동일한 도메인에 로그인한 경우 자동으로 사용자 자격 증명을 IIS에 제공하는 메커니즘입니다. 그러면 사용자 인증 완료 판정 및 인증된 사용자 정보를 얻을 수 있습니다.
이를 통해 사용자는 추가 로그인 작업 없이 IIS에서 호스팅(또는 연동)하는 웹 응용 프로그램에 액세스할 수 있으며 다른 응용 프로그램 서버와 SSO 연동을 수행할 수 있습니다.
※ 같은 도메인에 참가하고 있지 않은 경우나, 인증되어 있지 않은 유저가 IIS의 페이지에 액세스 하면 로그인 다이얼이 표시되어, 올바르게 인증하지 않는 경우는, HTTP Error 401.1 – Unauthorized 가 된다.

SSO(Single Sign On) 흐름
Chat&Messenger 온프레미스 Ultimate 플랜에서는 통합 Windows 인증을 통해 SSO가 가능합니다.
- 클라이언트는 먼저 통합 Windows 인증 페이지 /cam-iissso에 액세스합니다.
- /cam-iissso 페이지에서 ASP.NET에서 인증된 결정을 내리고 CAMServer에 연결
- CAMServer는 LDAP 검색을 수행하여 정규 AD 사용자인지 확인하고 ssoToken (고유 랜덤 값 30 바이트 이상)과 함께 CAMServer에 액세스하는 URL을 생성하고 리디렉션 요청을 수행합니다.
- CAMServer에 액세스하고 ssoToken을 사용하여 인증합니다. 인증이 성공하면 API 액세스에 대한 세션 ID가 할당됩니다.

SSO를 실현하기 위한 요구사항
Windows Server를 도메인에 가입
CAMServer/IIS를 실행하는 Windows Server를 Active Directory 도메인에 가입시킵니다.
기존 Windows Server가 참여하는 도메인을 확인하려면 서버 관리자 → 왼쪽 메뉴 로컬 서버 클릭 → 컴퓨터 이름을 클릭하고 도메인 열을 참조하십시오.
또한 IIS는 CAMServer와 동일한 서버에 동거하여 80번 포트에서 가동시켜 주십시오. CAMServer 의 전단에 LoadBalancer 를 배치하는 경우는, CAMServer 를 8080번 포트로 가동시키기 (위해)때문에, IIS는 443번 포트도 이용 가능합니다.
IIS 설치
서버 역할에서 IIS를 설치합니다.
IIS 설치 시 역할 서비스 선택 옵션에서 다음 검사를 수행합니다.
- Windows 인증
- ISAPI 필터
- ISAPI 확장 별도 설치

ISAPI 필터: IIS에서 확장 모듈 로드를 지원합니다.
ISAPI 확장: IIS에 ISAPI 확장을 추가합니다. AspNetCoreModuleV2 동작에 필수입니다. IIS 관리자 시작(iisreset)
ASP.NET Core Hosting Bundle 설치
ASP.NET Core Hosting Bundle 설치하십시오.
설치 후 IIS를 다시 시작하여 처리기 매핑에 AspNetCoreModuleV2가 있는지 확인하십시오.



응용 프로그램 추가 (cam-iissso)
Default Web Site에 cam-iissso 응용 프로그램을 추가합니다.
- 별칭: cam-iissso
- 물리적 경로: \sys\cam-iissso-net8.0
또한 cam-iissso-net8.0 폴더에 IIS_IUSRS 그룹에서 읽기 액세스 권한 (읽기 및 실행, 폴더 내용 나열, 읽기)을 부여하십시오.


Windows 인증 사용
Windows 인증을 마우스 오른쪽 단추로 클릭하고 사용으로 설정합니다.

인터넷 옵션 설정
IIS에서 제공하는 사이트를 인트라넷 영역에 추가
인터넷 옵션을 선택하고 보안 탭을 클릭하고 로컬 인트라넷을 선택 사이트 버튼을 클릭하고 고급 설정을 선택하여 사이트 URL 추가
자동 로그온 확인
레벨 사용자 정의를 클릭하고 사용자 인증 → 로그온에서 인트라넷 영역에서 자동으로 로그온을 선택했는지 확인하십시오.


LDAP 설정
IIS를 사용하여 Single Sign-On을 수행하는 경우,LDAP 설정(LDAPURl, LDAPBaseDN, 대리 인증을 실시하는 AD 사용자)가 필요합니다.

FQDN (정규화 된 도메인 이름)으로 액세스 및 SPN 등록
IIS의 Windows 통합 인증 페이지에 호스트 이름(NetBIOS 이름)으로 액세스하는 경우에는 필요하지 않지만 FQDN(정규화된 도메인 이름 예 sso.example.com)으로 액세스하는 경우에는 SPN 등록이 필요합니다.
SPN (Service Principal Name)은 Kerberos 인증에서 특정 서비스를 Active Directory에서 고유하게 식별하는 이름입니다. FQDN으로 액세스하는 경우 SPN을 등록하면 클라이언트가 액세스할 서비스에 대해 Kerberos 티켓을 올바르게 요청할 수 있습니다.
예를 들면 https://sso.example.com
에 액세스할 때 클라이언트(브라우저)는 Active Directory에 "HTTP/sso.example.com이라는 서비스에 연결하고 싶다"고 티켓을 요청합니다. Active Directory는 해당 SPN이 어떤 계정에 연결되어 있는지 확인하고 해당 서비스 티켓을 발급합니다. SPN이 제대로 등록되지 않으면 Kerberos 인증이 실패하고 인증 대화 상자가 표시됩니다.
SPN 등록은 IIS를 호스팅하는 컴퓨터 계정에 대해 수행됩니다. 예를 들어ad
라는 호스트 이름으로 작동하는 IIS의 경우 다음과 같이 SPN을 등록합니다.
setspn -S HTTP/sso.example.com ad$
등록 후 다음 명령으로 확인이 가능합니다.
setspn -L ad$
이 결과에 HTTP/sso.example.com
이 표시되면 SPN 등록이 성공한 것입니다.
HTTP 프록시 연결 환경에서 사용할 수 없음
SSO는 HTTP 프록시 연결 환경에서는 사용할 수 없으므로 주의하십시오.
LoadBalancer + SSL 환경에서의 구성
LoadBalancer + SSL 환경에서 IIS 통합 Windows 인증을 사용하는 경우 아래 블로그 게시물을 참조하십시오.
