2016-10-18 4 views
1

Active Directory와 함께 Windows 인증을 사용하여 싱글 사인온 (SSO)을 활용하는 웹 응용 프로그램을 만들려고합니다. 로그인 한 Windows 사용자 도메인 및 사용자 이름을 가져 오는 데 문제가 있습니다. 상황이 나는 시도했다 :IIS 10에서 C# Razor로 Windows 사용자 도메인/사용자 이름을 얻는 방법은 무엇입니까?

  • WindowsIdentity.GetCurrent().Name

    반환 IIS APPPOOL\DefaultAppPool

  • System.Environment.UserName

    반환 DefaultAppPool

  • Page.User.Identity.Name

    를 컴파일 오류


    익명 인증에개

    결과를 사용할 수
    ASP.NET 가장이

    <?xml version="1.0" encoding="utf-8"?> 
    <configuration> 
        <appSettings> 
        <add key="EnableSimpleMembership" value="false" /> 
        </appSettings> 
        <system.web> 
        <compilation debug="false" targetFramework="4.6.1"> 
         <assemblies> 
         <add assembly="System.Net.Http, Version=4.1.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" /> 
         <add assembly="Microsoft.Web.Administration, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
         </assemblies> 
        </compilation> 
        <httpRuntime targetFramework="4.6.1" /> 
        <authentication mode="Windows" /> 
        <authorization> 
         <deny users="?" /> 
        </authorization> 
        <identity impersonate="true" /> 
        </system.web> 
        <runtime> 
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
         <dependentAssembly> 
         <assemblyIdentity name="System.Security.Cryptography.X509Certificates" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
         <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" /> 
         </dependentAssembly> 
         <dependentAssembly> 
         <assemblyIdentity name="Microsoft.Win32.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
         <bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" /> 
         </dependentAssembly> 
         <dependentAssembly> 
         <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
         <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" /> 
         </dependentAssembly> 
         <dependentAssembly> 
         <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> 
         <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" /> 
         </dependentAssembly> 
        </assemblyBinding> 
        </runtime> 
        <system.webServer> 
        <modules runAllManagedModulesForAllRequests="true"> 
        </modules> 
        <validation validateIntegratedModeConfiguration="false" /> 
        <handlers> 
         <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
         <remove name="OPTIONSVerbHandler" /> 
         <remove name="TRACEVerbHandler" /> 
         <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
        </handlers> 
        </system.webServer> 
    </configuration> 
    
    의 Web.config


    을 활성화
    Windows 인증을 사용할 수 있습니다

+0

가 현재 요청에 따라 사용자를 확인하려고 되세요 때보기. '@ User.Identity' – Nkosi

+0

BTW에서는 Windows ID를 얻기 위해 가장을 사용하지 않아도됩니다. 다른 서버에 액세스하여 서버에 액세스 한 사용자의 자격 증명을 "위임"하려는 경우에만 중요합니다. – grafgenerator

답변

2

당신은 당신이 현재 사용자에게

예를 들어, 액세스하려고하는 상황에에 따라 조정해야 할 수도 있습니다 Controller에서 당신이 할 수있는 다음 :

User.Identity.GetUserId(); 

당신이 사용하고 있는지 확인하십시오

using Microsoft.AspNet.Identity; 
+0

웹 응용 프로그램은 MVC 프레임 워크를 사용하지 않습니다. 엄격하게 C#/면도기입니다. –

+0

그래서 앱이 어떻게 요청을 처리하나요? ASP.NET Core를 사용합니까, 아니면 ASP.Net 응용 프로그램입니까? – grafgenerator

+0

그것은 ASP.net 응용 프로그램입니다. 아직 요청에 대해 생각해 보지 않았습니다. 방금 ASP.net을 배우기 시작했습니다. –

0

을 시도해보십시오 :

var windowsIdentity = System.Web.HttpContext.Current.User.Identity as WindowsIdentity; 
+0

'System.NullReferenceException : 객체 참조가 객체의 인스턴스로 설정되지 않았습니다. ' –

+0

HttpContext에 System.Web을 추가하기 만하면됩니다. 나는 대답을 업데이트했다. – grafgenerator

+0

'System.Web'을 추가해도 아무 것도 바뀌지 않습니다. –