2014-11-14 2 views
0

ADFS 서버에 대해 인증 할 WIF 4.5를 사용하여 MVC5에서 빌드하려는 응용 프로그램의 프로토 타입을 개발 중입니다. 지금까지는 ADFS 구현이 작동했지만 외부 사용자가 ADFS를 사용하여 홈 컨트롤러에서 인증하는 동안 인트라넷의 사용자가 특정 컨트롤러 (예 : 관리 컨트롤러)에 대해 수동으로 인증 할 수 있도록하는 요구 사항이있었습니다. 언뜻 나는 이것이 단순한 web.config 설정이라고 생각했지만, 지금은 그렇지 않은 것으로 보입니다..NET MVC5 (ADFS 및 Windows 인증 포함)

ADFS는 응용 프로그램과 동일한 도메인에 있지 않지만 응용 프로그램이 분리 된 도메인에서 Windows 인증을 수행해야합니다.

내 질문은 A) 가능한가, 아니면 프레임 워크가 처리 할 수없는 것을하려고합니까? B) 어떻게 이것을 성취 할 수 있습니까?

나는 모든 인증이 적용되는 경우, 그것은 항상 ADFS입니다 것으로 보인다

<location path="Admin"> 
    <system.web> 
    <!--Having this here throws an error--> 
    <authentication mode="Windows"></authentication> 
    <authorization> 
     <deny users="?" /> 
    </authorization> 
    </system.web> 
</location>` 

<system.web> 
    <authentication mode="None|Federated|Windows" /> 
    <authorization> 
    <deny users="?" /> 
    </authorization> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5" requestValidationMode="4.5" /> 
</system.web> 

의 몇 가지 조합을 시도했습니다. On-Premises Organizational Authentication Option (ADFS) With ASP.NET in Visual Studio 2013을 사용하여 템플릿을 시작하고 관리자가 제공 한 메타 데이터를 입력했습니다. 따라서 내 프로젝트는 ADFS 워크 플로에서 얻은 사용자 개체를 사용하기 위해 약간의 사용자 지정을 사용하여 템플릿에서 다소 바닐라 구현 방식을 사용합니다.

I가 상기 인증 모드는 상기 위치 노드에 설정 될 때 상기 참조 얻는 오차

애플리케이션 레벨 이후 allowDefinition = 'MachineToApplication'으로 등록 된 섹션을 사용하는 오류이다. 이 오류는 가상 디렉터리가 IIS에서 응용 프로그램으로 구성되지 않아 발생할 수 있습니다.

내가 수집 한 것은 IIS에서 내 가상 디렉터리가 응용 프로그램으로 설정되어 있지는 않지만 관련된 결과입니다. 또한 실제로이 오류를 준수하려고 시도했지만 인증이 제대로 작동하지 않았습니다.

조금 더 자세히 말하면 IISExpress 설정 (궁극적으로 IIS)이 실제로 설정되어야한다는 것을 알았습니다. 따라서 사용자 이름과 암호 브라우저를 자극 시작 했 내 applicationHost.config 파일에

<location path="WebApplication4/Admin"> 
    <system.webServer> 
     <security> 
      <authentication> 
       <windowsAuthentication enabled="true" /> 
       <anonymousAuthentication enabled="false" /> 
      </authentication> 
     </security> 
    </system.webServer> 
</location> 

을 추가하지만 나는 또한

<system.webServer> 
    <modules> 
     <add name="WSFederationAuthenticationModule" type="System.IdentityModel.Services.WSFederationAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" /> 
     <add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" /> 
    </modules> 
    </system.webServer> 

완전히 내 인증을 납치 무엇 끝나는 것 같다 것으로 나타났습니다하고, 모든 것이 ADFS 서버를 통과하도록합니다. 수동으로 ADFS 인증을위한 메서드를 호출 할 수 있습니다. 그래서 내가 뭘하고 싶은지 어떻게 든 컨트롤러를 사용하지 말고 Windows 인증을 사용하도록 지시합니다. 그러나 단순히 ADFS 워크 플로를 깨뜨리지 만 해당 모듈을 주석으로 처리하면 Admin 컨트롤러에서 Windows 인증을 제대로 사용하게됩니다.

답변

1

주어진 위치에 대한 인증 방법을 무시할 수 없습니다. 응용 프로그램에 대해 하나의 인증 방법 만 사용할 수 있습니다.

Windows 인증의 경우 응용 프로그램을 호스팅하는 서버가 도메인 간 트러스트가없는 한 인트라넷 사용자와 동일한 도메인에있는 경우에만 작동합니다.

또한 인트라넷에서 ADFS를 사용할 수있는 경우 ADFS2 개 인스턴스간에 연합을 설정할 수 있습니다. 그런 다음 외부/내부 사용자에 대해 인증을 수행 할 수 있습니다.

승인 규칙의 경우 관리자 섹션에 대한 액세스 권한을 부여하려면 클레임을 사용해야합니다. 클레임 변환 모듈을 추가하여 컨트롤러에 대한 사용 권한을 설정할 수있는 내부 ADFS에서 사용자를 인증 한 경우 관리자 역할 클레임을 추가해야합니다.

짐작할 수 있듯이이 방법은 간단한 구현 방법이 아니며 ADFS가없는 경우 내부 인프라를 더 많이 설치해야합니다.

또 다른 방법은 내부 사용자를 앱에 프로비저닝하는 것입니다. 몇 명의 사용자에게만 액세스 권한을 부여하기 만하면 쉽게 접근 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 내 응용 프로그램을 내부 응용 프로그램으로 분할하고 그런 식으로 처리해야한다고 생각합니다. –

+0

"귀하의 응용 프로그램에 대해 하나의 인증 방법 만 가질 수 있습니다."라는 진술이 사실이라고 생각하지 않습니다. 이 블로그 게시물을 보면서 (아직 시도하지는 않았습니다) ADFS와 양식 인증을 함께 사용할 수있는 것처럼 보입니다 (http://leastprivilege.com/2012/02/02/). 혼합 양식 및 토큰 인증 단일 ASP 웹 응용 프로그램 /) – Bil

+0

맞습니다. 몇 가지 인증 스키마를 몇 가지 사용자 정의 코드와 혼합 할 수 있습니다. ASP.Net은 유연성을 제공하지 않으며 이것은 내가 의미했던 것입니다. @LazyCoder는 지원되지 않는 location 태그의 "인증"체계를 간단히 덮어 쓰고 싶지 않거나 다른 인증 스키마로 web.config를 배치 할 수 없습니다. –