Windows模拟问题

时间:2016-09-26 07:39:12

标签: c# asp.net authentication iis asp.net-web-api

大家好,我很难弄清楚为什么WindowsIdentity中的模拟无法正常工作。

我将在下面介绍这个想法和代码。

所以我的想法是我需要在我的应用程序中访问另一个应用程序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响应返回我期望的响应。

但是当我从服务器部署和运行时,响应是不同的,因此行为不是应该的。 我猜测请求不是从用户的角度发出的。

我可以解决问题的任何想法,建议或不同的方法。 谢谢大家。

1 个答案:

答案 0 :(得分:0)

对我而言,它可以从web.config文件启用模拟,并将IIS应用程序池设置为经典托管管道。

如果您对其他解决方案有任何其他了解,请分享。 谢谢