1

我正在开发一个 WCF 项目,该项目将成为我们的新服务层。

这些服务将由 2 个独立的客户端调用,第一个是 WPF 应用程序,另一个是 ASP.Net Web 应用程序。WPF 客户端将由内部用户运行,并将通过域身份验证对服务进行身份验证,并在该用户的上下文中运行。另一个将由外部用户使用,需要使用一些单独的机制进行身份验证,然后在我们的域上模拟“WebUser”帐户。

我正在阅读一些有关 Windows Identity Foundation 的信息,听起来这可能很合适。我是否认为我可以拥有 2 个令牌服务,一个用于域身份验证,一个用于 ASP.Net 成员身份验证(或类似的等价物),并让每个客户端从相关 STS 获取它的令牌并将其传递给 WCF服务?

我假设有一个可以开箱即用的 STS 用于域身份验证,但是我是否必须自己实现第二个来验证 Web 用户?我找不到很多这方面的信息。

我是在思考正确的路线,还是应该为每个服务创建决斗端点,每个服务都有不同的身份验证机制?还是我应该做一些完全不同的事情?

谢谢

4

2 回答 2

2

您应该看看身份服务器,因为它确实可以处理这种情况。

领导上述项目的人有一个关于这个确切场景的精彩视频!您需要注册才能观看,但他们提供免费试用。

基本上,您从身份提供者那里获得一个令牌(内部客户端的 Windows ADFS,以及您为外部用户决定的任何内容)。您将将此令牌提供给联合网关(可能是身份服务器,但也可能是 Azure ACS)。这将返回一个身份验证令牌,然后您可以将其与您的服务一起使用。

于 2013-01-15T09:45:59.103 回答
2

使用基于声明的身份验证/WIF 的最大优势在于,身份验证用户的任务和用户属性的管理都从应用程序转移到了 STS/身份提供者。

您正在开发一个服务层,但使用 WIF 的真正好处在于编写在您的层之上的应用程序。WPF 应用程序将不再需要连接到 AD 并获取用户的组来确定他们被允许做什么。这些组将作为用户/WIF 提供的令牌中的声明可见。

Web 应用程序(它只是一个 Web 应用程序还是更多?)将不再需要 ASP.Net Membership 数据库以及伴随的用户管理。此功能已移至 STS。

这是有代价的。(总有,不知何故......)基于声明的身份验证有一个相当陡峭的学习曲线。所有相关人员的季度都需要一段时间才能下降。

因此,您的问题的答案取决于基于您的服务层构建的 Web 应用程序拥有什么样的用户以及有多少用户。以及他们想知道多少。您能否信任 Google/Facebook/Windows Live 进行身份验证?用户是否已经在您域中的现有数据库中?维护用户目录需要做多少工作?您的营销人员是否希望定期向他们发送电子邮件?等等。

这可能不只是由服务层的开发人员来决定,而是要与组织中的其他人讨论。

如果好处不是特别大,另一种选择是简单地将这些职责保留在 Web 应用程序的服务器上。每个 Web 应用程序都有一个很好的旧 ASP.Net 成员数据库,它会自行对用户进行身份验证。当从服务层询问查询时,它将显示其 Web 服务器证书并指定用户的名称和类型。

如果好处足够大,原则上您可以将 ADFS 2.0 用于一切。它现在还可以存储外部用户,如果您已经拥有 Active Directory,它是免费的。或者罗斯推荐的 ThinkTecture 2.0 服务器。它更容易定制,而且您的系统管理员和安全人员可能不会太热衷于向 ADFS 服务器开放防火墙。

微软对 WIF 有一些很好的阅读,特别是基于声明的体系结构概述

于 2013-01-19T22:58:51.350 回答