โซลูชัน ASP.NET Core & Angular2 ไม่ทำงานกับ Windows Authentication ภายใน IIS Express 10

ฉันกำลังพยายามทำให้ Windows Authentication ทำงานภายในแอปพลิเคชันเว็บ ASP.NET Core & Angular 2

แอปพลิเคชันถูกสร้างขึ้นโดยใช้คำสั่งต่อไปนี้:

npm install -g yo generator-aspnetcore-spa
yo aspnetcore-spa

เมื่อเข้าถึงโฮมเพจซึ่งเตรียมใช้งาน SPA ด้วย ฉันได้รับข้อผิดพลาดต่อไปนี้:

Exception: Call to Node module failed with error: Response with status: 401 null for URL:

    Microsoft.AspNetCore.NodeServices.HostingModels.HttpNodeInstance+<InvokeExportAsync>d__7.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.NodeServices.HostingModels.OutOfProcessNodeInstance+<InvokeExportAsync>d__14.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.NodeServices.NodeServicesImpl+<InvokeExportWithPossibleRetryAsync>d__10.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.NodeServices.NodeServicesImpl+<InvokeExportWithPossibleRetryAsync>d__10.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.SpaServices.Prerendering.PrerenderTagHelper+<ProcessAsync>d__33.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Razor.Runtime.TagHelpers.TagHelperRunner+<RunAsync>d__0.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
System.Runtime.CompilerServices.TaskAwaiter.GetResult()
AspNetCore._Views_Home_Index_cshtml+<ExecuteAsync>d__31.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Mvc.Razor.RazorView+<RenderPageAsync>d__14.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Mvc.Razor.RazorView+<RenderAsync>d__13.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor+<ExecuteAsync>d__18.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Mvc.ViewResult+<ExecuteResultAsync>d__26.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker+<InvokeResultAsync>d__30.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker+<InvokeNextResultFilterAsync>d__28.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ResultExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker+<InvokeNextResourceFilter>d__22.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ResourceExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker+<InvokeAsync>d__20.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Builder.RouterMiddleware+<Invoke>d__4.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.SpaServices.Webpack.ConditionalProxyMiddleware+<Invoke>d__5.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.SpaServices.Webpack.ConditionalProxyMiddleware+<Invoke>d__5.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware+<Invoke>d__7.MoveNext()

มีการใช้วิธี Index ของ HomeController และฉันได้รับค่าที่ถูกต้องสำหรับ User.Identity

ไฟล์การกำหนดค่าของฉันมีลักษณะดังนี้:

.vs\config\applicationhost.config (ไฟล์การกำหนดค่า IIS Express)

<authentication>

    <anonymousAuthentication enabled="false" />
    <basicAuthentication enabled="false" />
    <clientCertificateMappingAuthentication enabled="false" />
    <digestAuthentication enabled="false" />

    <iisClientCertificateMappingAuthentication enabled="false">
    </iisClientCertificateMappingAuthentication>

    <windowsAuthentication enabled="true">
        <providers>
          <add value="NTLM" />
          <add value="Negotiate" />
        </providers>
    </windowsAuthentication>

</authentication>

<authorization>
    <add accessType="Allow" users="*" />
</authorization>

web.config (ฉันไม่คิดว่ามันจะถูกใช้เมื่อทำงานภายใน IIS Express)

  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="true" />
    <validation validateIntegratedModeConfiguration="false" />
  </system.webServer>

launghsettings.json

  "iisSettings": {
    "windowsAuthentication": true,
    "anonymousAuthentication": false,
    "iisExpress": {
      "applicationUrl": "http://localhost:53968/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },

ข้อผิดพลาดแสดงว่าการเข้าถึงถูกปฏิเสธ แต่ฉันไม่ทราบวิธีตรวจสอบ เครื่องมือสำหรับนักพัฒนาไม่แสดงคำขออื่นใดยกเว้น GET สำหรับหน้าแรก

คำถาม: ฉันจะสร้าง Windows Authentication ภายใน IIS Express ได้อย่างไรเมื่อใช้ร่วมกับ Angular2

หมายเหตุ: เมื่อปรับใช้บน IIS ทุกอย่างทำงานได้ดี


person Alexei - check Codidact    schedule 23.05.2017    source แหล่งที่มา
comment
บางทีคุณอาจต้องดูสิ่งนี้ก่อน: codeproject .com/Tips/1022870/ บทความนี้มีไว้สำหรับ AngularJS แต่ควรให้แนวคิดบางประการ   -  person wannadream    schedule 23.05.2017
comment
@wannadream - ใช่ ฉันได้ตรวจสอบแล้วและพยายามแยก WebApi และ Angular 2 ออกเป็นสองโครงการบนเว็บ WebApi ใช้ Windows Authentication และแอป Angular 2 ช่วยให้เข้าถึงได้โดยไม่ระบุชื่อ ฉันไม่ได้รับข้อผิดพลาด แต่การโทร http จาก Angular 2 ยังคงล้มเหลว (ดูเหมือนว่า CORS ที่มีปัญหาเกี่ยวกับการรับรองความถูกต้องของ Windows) เมื่อฉันทำให้มันใช้งานได้ ฉันจะเพิ่มการตอบกลับที่นี่ ขอบคุณ   -  person Alexei - check Codidact    schedule 24.05.2017


คำตอบ (1)


คำแนะนำของ wannadream เป็นสิ่งที่ดี เนื่องจากช่วยให้มีสถาปัตยกรรมที่เหมาะสมเมื่อจับคู่ Angular 2/4 กับ ASP.NET Core (มีแอปพลิเคชันสำหรับส่ง SPA และไฟล์สแตติก และอีกหนึ่งรายการสำหรับ Web API)

ฉันได้จัดการเพื่อแก้ไขปัญหาของฉันโดยการลบแอตทริบิวต์ asp-prerender-module ออกจาก Home/Index.cshtml:

@{
    ViewData["Title"] = "Home Page";
}

@*asp-prerender-module="ClientApp/dist/main-server"*@
<app>Loading...</app>

<script src="~/dist/vendor.js" asp-append-version="true"></script>
@section scripts {
    <script src="~/dist/main-client.js" asp-append-version="true"></script>
}

อย่างไรก็ตาม ฉันยังไม่ชัดเจนสำหรับฉันว่าจุดประสงค์ของ asp-prerender-module คืออะไร แต่ดูเหมือนว่าจะไม่มีผลกระทบต่อฟังก์ชันการทำงานใดๆ ของแอปพลิเคชัน

person Alexei - check Codidact    schedule 25.05.2017