2009-10-15 68 views
0

我的確實嘗試使用WindowsTokenRoleProvider保護ASP.NET應用程序的錯誤錯誤。對於特定的用戶,我看到下面的ProviderException拋出:WindowsTokenRoleProvider災難性故障

API failed due to error 'Catastrophic failure 

正如我所說的,這似乎只發生了particuar用戶,我似乎能夠訪問該站點罰款,所以有幾個同事。我們和失敗用戶之間的唯一區別是他們是而不是管理員在網站託管的框中。

從調用GetRolesForUser。從MSDN documentation它指出,這可能是因爲以下的發生:

  1. 當前執行用戶不 沒有通過身份驗證的 的WindowsIdentity連接到 Page.User。對於非HTTP 的情況,當前正在執行的 用戶沒有經過身份驗證的 WindowsIdentity附加到 Thread.CurrentPrincipal。
  2. 用戶名不符合當前WindowsIdentity的名稱 。
  3. 檢索 用戶的Windows組 信息時發生故障。

我懷疑問題可能與3點,我已經成功地使用.NET Framework調試能力,在Visual Studio 2008來調試代碼,它似乎是失敗的呼叫:

UnsafeNativeMethods.GetGroupsForUser 

我不明白的是爲什麼!如果調用在框架庫中失敗,那麼我不完全確定我能做些什麼來解決這個問題。

任何幫助或建議,將grately收到我在茫然,我從這裏去哪裏,我認真考慮使用角色提供替代其他一些不太優雅的方法報廢。

回答

0

好,由微軟ADC一些非常有用的輸入之後,我已經成功地解決這個問題。

對UnsafeNativeMethods.GetGroupsForUser的調用應該返回一個全部特定用戶有權訪問的AD組(這是遞歸的,因此也包括父組等)。看起來,有時在域之間遷移AD配置文件時有時會出現,用戶最終可能會遇到指向沒有與其關聯的名稱的組的錯誤SID。因爲調用試圖抓住所有的SID名特定配置文件當它到達導致(而無益)「災難性的失敗」上述錯誤的無效項就會失敗。

只是作爲參考,該組被顯示出來在轉儲從whoami命令行工具如下(掩蔽其它基團,SID和域名):

DOMAIN\ Deleted account S-1-2-34-123456789-123456789-123456789-12345 Mandatory group, Enabled by default, Enabled group 

正如你可以看到,該域名字存在,但該組不是。解決方案是讓域管理員從用戶的配置文件中刪除條目。

我真的希望這個幫助別人解決這個問題,因爲它讓我完全 flummoxed!

相關問題