2017-09-06 68 views
5

我想在對.NET核心2.0空的Web應用程序混合的Windows匿名認證。我想避免[Authorize]屬性,因爲我不想使用Mvc或控制器。Windows和匿名身份驗證在.net中核2.0

我的設置如下:

  1. 我創建了一個空的.Net核2.0的Web應用程序

  2. 我去項目屬性 - 選中> 「啓用Windows身份驗證」 和殘疾人 - >調試「啓用匿名身份驗證」。 現在「windowsAuthentication」:true和「anonymousAuthentication」:false出現在我的launchSettings.json下的「IIS」。

  3. 裏面Startup.cs,在ConfigureServices我加 services.AddAuthentication(Microsoft.AspNetCore.Server.IISIntegration.IISDefaults.AuthenticationScheme);https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/identity-2x#windows-authentication-httpsys--iisintegration

  4. 提到我添加了一個簡單Console.WriteLine(context.User.Identity.Name);地看到,它的作品裏面app.Run和...... 它所有的作品!

但是......只要我設置「anonymousAuthentication」爲true launchSettings.json它停止工作,我想不出我能做些什麼來讓Windows身份驗證一起工作,用它。 Context.User.Identity.IsAuthenticated總是假的。 正如你所看到的,我的配置非常簡單,我需要它保持這種方式。我想在某些動態路由上啓用/禁用Windows身份驗證,因此使用具有[授權]屬性的控制器不是一個選項。

我想要實現的是一個簡單的應用程序,其中URL「/ authenticated」將回復context.User.Identity.Name的值,url「/ public」會回覆類似說的內容:「這是一個公共頁面! 。 與NTLM authentication on specific route in ASP.NET Core類似,但沒有[Authorize]屬性和控制器。 資源非常稀缺......任何人都知道我可能錯過了什麼? 謝謝!

回答

5

匿名優先。當您嚮應用的受限制部分發出匿名請求時,您需要調用httpContext.ChallengeAsync()。這將導致客戶端發送下一個請求的憑據。這裏有一個測試:https://github.com/aspnet/ServerTests/blob/e155b814349f8ff9dd563480d784c38837b0b59f/test/ServerComparison.TestSites/StartupNtlmAuthentication.cs#L34-L59

+0

非常感謝! 'context.ChallengeAsync(「Windows」)'搞定了!我發誓我試圖等待'context.ChallengeAsync()',但我使用「NTLM」作爲模式參數,它告訴我身份驗證模式不存在......不知道要傳遞什麼值... –

相關問題