[英]Impersonation only works when a user is specificed
我在使用沒有指定用戶的模擬訪問Web服務時遇到問題。
Works: <identity impersonate="true" userName="DOMAIN\\USERNAME" password="MyPassword" /
>
不起作用
<identity impersonate="true" />
在調試時,我使用下面的代碼來驗證正在使用的域和用戶名,它們是。
System.Security.Principal.WindowsIdentity.GetCurrent().Name;
這是我的web.config的更多內容
<authentication mode="Windows" />
<identity impersonate="true" />
<authorization>
<allow users="*" />
<deny users="?"/>
</authorization>
我正在登錄提示,圖片如下
任何想法為什么它只有在我在web.config中指定用戶時才有效? 我使用與<identity impersonate="true" userName="DOMAIN\\USERNAME" password="MyPassword" /
>相同的Domain\\Username
和密碼登錄。 我已經嘗試過多個帳戶,當我將他們的憑據放在web.config
時它們都可以正常工作但是沒有一個工作時將身份設置為<identity impersonate="true" />
並登錄。
編輯遠程服務器返回錯誤:(403)禁止。
編輯2一切正常,在調試時,並在包含它托管的IIS的服務器上點擊服務,我嘗試了多個帳戶,他們都工作。 一切都在同一個領域
請注意https://support.microsoft.com/en-us/kb/306158中的以下文本
模擬ASP.NET應用程序的所有請求的特定用戶
若要模擬特定用戶對ASP.NET應用程序的所有頁面上的所有請求,您可以在該應用程序的Web.config文件的標記中指定userName和password屬性。 例如:注意在線程上模擬特定用戶的進程的標識必須具有“作為操作系統的一部分”權限。 默認情況下,Aspnet_wp.exe進程在名為ASPNET的計算機帳戶下運行。 但是,此帳戶沒有模擬特定用戶所需的權限。 如果您嘗試模擬特定用戶,則會收到錯誤消息。 此信息僅適用於.NET Framework 1.0。 .NET Framework 1.1不需要此權限。
若要解決此問題,請使用下列方法之一:將“作為操作系統的一部分”權限授予ASPNET帳戶(權限最少的帳戶)。
注意雖然您可以使用此方法來解決此問題,但Microsoft不建議使用此方法。 將運行Aspnet_wp.exe進程的帳戶更改為Machine.config文件的配置部分中的系統帳戶。
您可以將Aspnet_wp.exe進程設置為以您嘗試模擬以獲得所需權限的用戶身份運行。
這也在前面討論過: 你如何在.NET中進行模擬?
它可能是NTLM雙跳認證問題。 簡而言之,確保正確設置Kerberos SPN,以便使用它而不是NTLM。 這篇MSDN博客文章有很好的解釋。
或者,基本或表單身份驗證也將實現您希望實現的目標。 這是因為應用程序將擁有用戶的憑據,如果配置正確,可以使用它們來訪問后端資源。
您可能還想查看Kerberos委派。 它是一種通過它的SPN將第二跳限制為僅一個資源的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.