我在为Win Auth
配置的本地计算机上部署了一个WCF服务<basicHttpBinding>
<binding name="NewBinding0">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
我有一个测试它的WPF项目,它运行得很好。
我尝试创建一个Windows应用商店应用并使用我登录的(域)用户来调用该服务但无法使其工作
我的用户是域用户,我可以通过调用Windows.System.UserProfile.UserInformation.GetDomainNameAsync()
如果我实现部分ConfigureEndpoint并明确设置凭据,我可以很好地使用该服务 -
static partial void ConfigureEndpoint(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint, System.ServiceModel.Description.ClientCredentials clientCredentials)
{
clientCredentials.Windows.ClientCredential = new System.Net.NetworkCredential("<domain>\\<username>", "<password>");
}
但如果我只是把
clientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
我收到以下错误
{“HTTP请求未经授权使用客户端身份验证方案'Ntlm'。从服务器收到的身份验证标头是'Negotiate,NTLM'。”}
我已配置企业身份验证和专用网络(客户端和服务器)功能
在登录域用户的上下文中调用服务需要做什么?
(我发现this unanswered question可能是指同一个问题,但还没有答案?
答案 0 :(得分:0)
事实证明,问题是由于我在笔记本电脑上托管服务(用于测试)并使用“localhost”调用它。
我已将相同的服务部署到我们域上的另一台服务器并更新了应用程序中的端点地址,这一切都运行正常。
看起来对localhost
上的Windows商店应用调用服务有限制如果我明确提供凭据,那么为什么这种方法工作正常还不太清楚,如果我只是携带登录用户,那就不行了。