[英]Windows Authentication with .net 6 (Negotiate) not working - how can I debug?
我用 .net 6 創建了一個非常小的示例項目,並通過在啟動時設置以下行來啟用 kerberos/ntlm 身份驗證:
services.AddAuthentication(NegotiateDefaults.AuthenticationScheme).AddNegotiate();
這很好用。 通過調用以下命令,我在 controller 中獲得了所需的用戶:
HttpContext.User.Identity?.Name
但是后來我想將這種行為集成到我們現有的應用程序中(基於 as.netzero 框架),但在這里它不再起作用了。 HttpContext.User.Identity?.Name 只是 null - 未設置用戶。 當然,我們的應用程序注冊了許多其他服務,並且這些附加服務中的一個可能會破壞協商機制。
有誰知道我該如何調試這個問題? “AddNegotiate()”實際上改變了什么?
同時,在做了更多研究之后,我說,在簡單的工作示例中,我在 HttpContext 中有一個“授權”header ,其值類似於“NTLM TlRMTVNTUAADAAAAGA ...”,而在不起作用的復雜示例中,我沒有這個 header - 但我確實有一個“MS-AS.NETCORE-TOKEN”header ,其值類似於“a1b57bcf-4708-440d-8f38-c541e1ae77b5”。
是否缺少將 MS-AS.NETCORE-TOKEN 轉換為授權字符串的組件?
編輯:
我發現 MS-AS.NETCORE-TOKEN 實際上與身份驗證無關。 而且我還發現我可以使用以下注釋我的 controller 方法:
Authorize(AuthenticationSchemes = NegotiateDefaults.AuthenticationScheme)
這將以某種方式強制對此 api 進行協商 - 不幸的是,直到現在它只在 IIS Express 中工作,但在 IIS 中還沒有工作。
當您在 IIS 中托管時,IIS 會為您處理 Windows 身份驗證,但您必須使用 web.config 文件告訴它這樣做。 例如:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<security>
<authentication>
<anonymousAuthentication enabled="false" />
<windowsAuthentication enabled="true" />
</authentication>
</security>
</system.webServer>
</configuration>
在 ASP.NET 核心中的 Windows 身份驗證文檔中的 IIS 標題下有更多信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.