1

这是我们的场景:

  • 我们在解决方案 S1 中有一个 MVC3 应用程序“MVC3ABC”,它使用表单身份验证进行保护(目前用户详细信息仅在 web.config 中用于早期开发,但它们很快就会在 SQL Server 数据库中)。

  • MVC 控制器 C1 调用 WCF 服务 W1,该服务在解决方案 S1 中的单独 ASP.NET Web 项目下具有 .svc 文件。在这种情况下,WCF 服务不需要知道登录的特定用户,只需知道它是经过身份验证的用户访问。

  • MVC View V1 托管一个 Silverlight4 应用程序 SLV1,它调用 WCF 服务 W2,该服务在不同的解决方案 S2 中的一个单独的 AST.NET Web 项目下具有 .svc 文件。在这种情况下,WCF 服务确实需要知道登录的特定用户,因为它会根据登录到 MVC 站点的用户从不同的数据库中获取数据。

所以本质上,我们需要的是,已经通过 MVC 应用程序进行身份验证的用户可以从 MVC 站点访问这两个 WCF 服务,对于 W2 服务,我们需要知道它是哪个用户。对 MVC 站点之外的 WCF 服务的任何访问也需要进行身份验证或不应该工作(不允许匿名访问 WCF 服务)。

有解决这个问题的标准方法吗?有谁知道我可以在其中看到这种事情的任何示例项目?

一些额外的细节 - 我们使用 Visual Studio 2012 RC、.NET 4.5 和 IIS7。

谢谢

4

1 回答 1

1

我猜你想要实现的是跨 MVC 应用程序和 WCF 服务共享表单身份验证。你可以这样做:)

这个想法是您必须将 cookie 从 MVC 应用程序共享到 WCF 服务。

以下是您在执行此操作时必须注意的事项。

  1. MVC 和 WCF 服务应该在 web.config 中使用相同的表单和 machineKey 部分。见这里。意味着 WCF 服务也应该使用表单身份验证,并且它们三个应该共享相同的机器密钥以共享 cookie。

  2. 当然,WCF 服务应该在 asp.net 兼容模式下运行。

  3. 在调用 WCF 服务时,您应该手动将表单身份验证 cookie 添加到传出消息标头。见这里

编辑:

根据 OP 的评论,我正在更新我的答案。

当 WCF 服务必须仅由 MVC 使用而不由其他客户端使用时,上述解决方案似乎很好。但是,如果 WCF 服务还希望被 MVC 项目以外的不同客户端使用,那么客户端将面临艰难的时期,因为他们必须构造 cookie 并附加到请求中(我不确定这是否可能!)。

因此,更优雅的解决方案是使 WCF 服务自包含,这意味着将身份验证/授权机制单独集成到它。一种方法是您可以轻松地将 ASP.NET 成员资格提供程序集成到 WCF 服务。通过这种方式,身份验证将在 WCF 服务端单独进行。其他优点是第三方客户端或其他应用程序可以轻松使用通过代理传递凭据的 WCF 服务。

所以这里有一个链接,说明如何在 WCF 服务中配置 asp.net 成员资格提供程序,

于 2012-07-13T12:51:16.837 回答