2016-09-26 82 views
0

嗨,大家好我很難弄清楚爲什麼WindowsIdentity中的模擬不起作用。Windows模擬問題

我將介紹這個想法以及下面的代碼。

所以這個想法是,我需要在我的應用程序內訪問另一個應用程序API。

public async Task<UserHrtbProfileDTO> HasHrtbAccessAsync(int userId, string systemUser) 
     { 
      WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent(); 
      using (identity.Impersonate()) 
      { 
       using (HttpClientHandler handler = new HttpClientHandler 
       { 
        Credentials = CredentialCache.DefaultNetworkCredentials, 
        UseDefaultCredentials = true 
       }) 
       { 
        using (HttpClient client = new HttpClient(handler, true)) 
        { 
         client.DefaultRequestHeaders.Accept.Clear(); 
         client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

         string requestURI = string.Format(ConfigurationManager.AppSettings["HRTB:Profile_Url"], userId); 
         HttpResponseMessage response = await client.GetAsync(requestURI); 

         return response.RequestMessage.RequestUri.OriginalString.Contains(requestURI) 
          ? new UserHrtbProfileDTO 
          { 
           HrtbProfileUrl = string.Format(ConfigurationManager.AppSettings["HRTB:Profile_Url"], userId), 
           ResponseURI = response.RequestMessage.RequestUri.AbsoluteUri, 
          } 
          : new UserHrtbProfileDTO 
          { 
           ResponseURI = response.RequestMessage.RequestUri.AbsoluteUri, 
           RequestURI = requestURI, 
           HasHrtbAccess = false, 
           IdentityUserName = identity.Name + "\n" + identity.IsAuthenticated + "\n" + identity.AuthenticationType + "\n" + identity.ImpersonationLevel + "\n" 
          }; 
        } 
       } 
      } 
     } 

如果我在本地IIS運行的行爲是好的,我有機會,我需要有和訪問被拒絕在那裏我沒有它。請求所針對的API響應返回我期望的響應。

但是,當我部署並從服務器運行響應是不同的,因此行爲是不應該的。 我猜測,請求不是從已經做出來的用戶的角度發出的。

任何想法,建議或不同的方法,我可以解決這個問題。 謝謝大家。

回答

0

對我來說,它啓用了從web.config文件啓用模擬並將IIS應用程序池設置爲傳統託管管道。

如果您有其他解決方案的其他知識,請分享。 謝謝