4

我有一个通过 ACS 使用用户名身份验证的 WCF 服务。这在我使用服务标识时效果很好,但是当我尝试使用我的 Windows Live ID 凭据时,我收到以下错误:

System.ServiceModel.FaultException:ACS10002:处理 SOAP 正文时出错。ACS50012:身份验证失败。ACS50026:名称为“louis@arsunica.com”的委托人不是已知委托人。

不幸的是,我还没有找到一个如何将 Windows Live ID 与 WCF 服务一起使用的示例。我能找到的唯一示例似乎集中在将多个身份提供者与 ASP.NET 或 MVC 网站集成。

在这方面的任何帮助将不胜感激......

4

1 回答 1

3

ACS 不会直接验证您的 Live ID 用户名和密码。ACS 充当 Live ID 的联合提供程序,它是一个中间人,因此它只会使用 Windows Live ID 颁发的令牌。ACS 在基于被动(浏览器重定向)的场景中支持开箱即用的 Live ID 身份验证,但对于 WCF 服务,您可以考虑改用 Live Connect API。

要将 LiveID 与您的服务一起使用,您的客户端首先对 LiveID 进行身份验证,然后将 LiveID 颁发的令牌提供给您的 WCF 服务。不过要振作起来,要完成所有这些工作需要一些障碍。

要使用 Live Connect API,您需要将 WCF 服务注册为具有 Live ID 的应用程序。然后,使用您的 WCF 服务的客户端需要能够处理 Live ID 将提示的基于 Web 的登录页面和用户同意页面。下面的文档是一个好的开始

http://msdn.microsoft.com/en-us/library/hh243641.aspx

http://msdn.microsoft.com/en-us/library/hh243647.aspx

http://msdn.microsoft.com/en-us/library/windows/apps/hh465098.aspx

下一个问题是您将从 Live Connect 获得的令牌将采用 JWT(JSON Web 令牌)格式。我不确定您是否可以从实时连接请求不同的令牌格式,但如果您的 WCF 服务身份验证是基于 WIF 的,它很可能需要 SAML 令牌。JWT 是 WIF 尚不支持的一种相当新的令牌格式,因此您必须在您的服务上配置一个能够理解 JWT 令牌的 WIF SecurityTokenHandler。上面的第三个链接有一些用于读取 JWT 的代码,这至少是一个开始。

于 2012-01-23T22:21:07.380 回答