簡體   English   中英

Windows 身份驗證 .net 6(協商)不起作用 - 我該如何調試?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM