2016-09-26 20 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" 
          }; 
        } 
       } 
      } 
     } 

私は動作がOKであるローカルIIS上で実行している場合は、私が持っている必要がアクセス権を持っていると私はそれを持っていないところのアクセスが拒否されています。リクエストが行われたAPIレスポンスは、私が期待するレスポンスを返します。

しかし、私がサーバーからデプロイして実行すると、レスポンスが異なるため、動作が異なる場合があります。 リクエストを作成したユーザーの観点からリクエストが送信されていないと推測しています。

私は問題を解決することができるアイデア、提案、または別のアプローチです。 ありがとうございます。

答えて

0

私にとっては、web.configファイルから偽装を有効にし、IISアプリケーションプールを従来の管理パイプラインに設定していました。

他の解決方法について他の知識がある場合は、教えてください。 ありがとうございました