1

我使用目錄服務將用戶的Active Directory密碼更改爲ASP.NET網站上一組管理工具的一部分。使用ASP.NET目錄服務模擬訪問被拒絕

我收到的錯誤:

Error: Unable to change password (do you have permission?).
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
---> System.UnauthorizedAccessException: Access is denied.
(Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
--- End of inner exception stack trace ---
at System.DirectoryServices.DirectoryEntry.Invoke(String methodName, Object[] args)
at System.DirectoryServices.AccountManagement.SDSUtils.SetPassword(DirectoryEntry de, String newPassword)
at System.DirectoryServices.AccountManagement.ADStoreCtx.SetPassword(AuthenticablePrincipal p, String newPassword)

Web.config寫着:

<authentication mode="Windows" /> 
<identity impersonate="true" /> 

當在Visual Studio調試環境設置密碼程序成功完成,但不能從不同的機器訪問時。我試圖使用模擬來允許此請求 - 該網站可以正確告訴我我的域和用戶名(使用Context.User.Identity),並且可以在Active Directory中查詢這兩種環境中的所有用戶的列表。

我PrincipalContext是:

new PrincipalContext(ContextType.Domain, "DOMAINNAME"); 

任何幫助非常讚賞。

+0

模擬[IIS Authenticated User](http://support.microsoft.com/kb/306158)是不是'嗎? – jao 2012-07-17 15:36:04

回答

0

您需要添加

<authorisation> 
    <deny user="?" /> 
</authorisation> 

這種拒絕訪問匿名用戶強制用戶進行身份驗證,這與模擬隨後將成爲活動用戶。沒有這個,你仍然作爲IUser訪客帳戶連接。

您還需要在IIS中啓用Windows身份驗證。

+0

我已經有一個''部分(我沒有包含在原文中)閱讀:''。無論如何,我已經添加了這條線,但它沒有影響到它。 Windows驗證已啓用。 – mctedo 2012-07-18 11:45:12

+0

拒絕用戶=「*」將拒絕所有用戶訪問,而您只想拒絕匿名用戶。這可能是錯誤的冒充類型。您正在使用的principalContext可能需要交互式用戶而不是模擬的用戶。您可能需要修改您的應用程序,以便用戶輸入其當前密碼。 – 2012-07-18 13:31:37

+0

我確實需要拒絕所有不屬於指定角色的用戶。但是,我會嘗試實現交互式用戶認證。 – mctedo 2012-07-18 18:07:22