使用 Windows 身份验证从 Windows 应用商店应用调用 WCF 服务

Posted

技术标签:

【中文标题】使用 Windows 身份验证从 Windows 应用商店应用调用 WCF 服务【英文标题】:Calling a WCF service using Windows Auth from a Windows Store App 【发布时间】:2013-09-03 09:57:52 【问题描述】:

我在为 Win Auth 配置的本地计算机上部署了一个 WCF 服务到 IIS

<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 可能指的是同一个问题,但还没有答案?

【问题讨论】:

【参考方案1】:

原来问题是我在笔记本电脑上托管服务(用于测试)并使用“localhost”调用它的结果。

我已将相同的服务部署到我们域中的另一台服务器,并更新了应用程序中的端点地址,一切正常。

似乎对本地主机上的 Windows 商店应用调用服务有限制

不太清楚为什么如果我明确提供凭据并且如果我只是携带登录用户则不能正常工作..

【讨论】:

以上是关于使用 Windows 身份验证从 Windows 应用商店应用调用 WCF 服务的主要内容,如果未能解决你的问题,请参考以下文章

使用 Windows 身份验证从 SQL Server 导入 sqoop

我可以从 Java EE webapp 使用 Windows 身份验证连接到 SQL Server 吗?

使用 pyodbc 从 Linux 向 Windows SQL Server 进行身份验证

表单身份验证和 Windows 身份验证的混合?

Windows 身份验证问题“登录来自不受信任的域,不能用于 Windows 身份验证。”

集成 Windows 身份验证 Wininet