簡體   English   中英

在asp.net中獲取Windows /域憑據,同時允許在IIS中進行匿名訪問

[英]Getting windows/domain credentials in asp.net while allowing anonymous access in IIS

我在我們的數據中心運行了一個asp.NET webapplication,我們希望客戶通過單點登錄進行登錄。 如果我們可以使用IIS集成安全性,這將非常容易。 但是我們不能這樣做。 我們對客戶的域控制器沒有信任。 我們希望網站可用於一般互聯網。 只有當人們從客戶網絡中連接時,他們才會自動登錄。

我們擁有的是域帳戶列表以及在asp.net代碼中通過LDAP查詢DC的方法。 在IIS中允許匿名訪問時,IIS永遠不會向瀏覽器挑戰憑據。 因此我們的應用程序永遠不會獲得用戶憑據。

有沒有辦法強制瀏覽器發送憑據(因此能夠使用單點登錄)與IIS接受匿名請求。

更新:

我嘗試自己發送401:未經授權,www-authenticate:NTLM標頭。 接下來發生的事情(正如Fiddler告訴我的那樣)是IIS完全控制並處理完整的請求鏈。 據我從各種來源了解,IIS采用用戶名,將挑戰發送回瀏覽器。 瀏覽器返回加密響應,IIS連接到域控制器以使用此響應對用戶進行身份驗證。

但是在我的方案中,IIS與客戶端位於不同的Windows域中,無法對用戶進行身份驗證。 因此,建立一個帶有Windows身份驗證功能的獨立站點也無法正常工作。

現在我需要選擇我正在研究的選項:

  1. 在我們的托管域和客戶域之間創建域信任(我們的IT部門對此不滿意)
  2. 使用NTML代理將IIS身份驗證請求轉發到客戶端域控制器(我們有可通過LDAP連接的VPN連接)

您要求的是混合模式身份驗證。 我最近使用了Paul Glavich兩個入口點機制 ,它完美無缺。 我想這是解決這個問題最優雅的解決方案。

不確定你是否能輕松實現這一目標。 與401挑戰發生在用戶請求的帶內基本不同 - 這樣,信用證出現在標題中,NTLM握手在一個單獨的端口上完成 - 然后由非托管代碼強制進入線程上下文。

你試圖拆開VS2008(或反射器)中的ASP.NET NTLM模塊,看看它是如何提取信用卡的?

不是真的答案 - 對不起......

此解決方案是關於表單身份驗證,但它詳細說明了401問題。

解決方案只是通過將以下內容放在Global.asax中來將處理程序附加到Application的EndRequest事件:

protected void Application_EndRequest(object sender, EventArgs e) {
    if (Context.Items["Send401"] != null)
    {
         Response.StatusCode = 401;
         Response.StatusDescription = "Unauthorized";
    } }

然后,為了觸發此代碼,您所要做的就是放一個

Context.Items["Send401"] = true;

編輯:
我已經使用此方法打開Anonymous和Integrated來獲取用戶的域憑據。 我不確定它是否適用於你的情況,但我認為我值得一試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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