【问题标题】:Need recommendations and help with ASP.NET + WCF + Security需要 ASP.NET + WCF + 安全方面的建议和帮助
【发布时间】:2011-03-12 01:19:16
【问题描述】:

我想在尝试构建一个使用托管在另一个 asp.net 应用程序中的 WCF 服务的 asp.net Web 应用程序时收到 cmets。两个应用程序将存在于同一台机器上,但具有 WCF 服务的应用程序将无法从外部访问。将有两个 Web 服务器共享负载均衡器后面的负载。

两个应用程序的应用程序池将使用相同的本地用户帐户(Web 服务器不是域的一部分),因此我正在考虑使用带有 Windows 安全性的 WsHttpBinding 在客户端和内部 wcf 服务之间进行通信。

前端 asp.net 应用通过自定义成员/角色提供程序使用表单身份验证来对用户进行身份验证和授权。用户数据库位于 sql server 数据库中。

我需要以某种方式将用户详细信息(用户名 + 角色)传递给 wcf 服务,以便在 wcf 中可以根据登录前端的角色来验证和授权。我读到我需要使用“支持令牌”,但我还没有弄清楚如何使用它。

我还阅读了一些关于声明和 WIF 的内容,这看起来很有趣,但不知道如何在我的场景中使用它们。

有没有人可以给我关于架构的建议,也许还可以告诉我如何将用户名传递给 wcf 服务,如果可能的话,还可以告诉我如何使用基于声明的授权?

【问题讨论】:

    标签: asp.net wcf security


    【解决方案1】:

    首先,如果两台服务器都位于公司 LAN 上的公司防火墙后面,我强烈建议使用 netTcpBinding 而不是任何基于 http 的绑定。由于以二进制格式对消息进行编码,NetTcpBinding 的速度要快得多。

    至于用户名/密码:您的 ASP.NET 前端服务器可以为调用 WCF 服务的用户设置客户端凭据 - 毕竟,ASP.NET 服务器确实可以访问 ASP.NET 成员数据库,不是吗?

    或者,如果您无法传递用户的凭据,您可以将一些标头传递给 WCF 服务来描述用户 - 实际上,您可能只需要用户的唯一 ID - 因为 WCF 服务可以找出其余的如果确实需要,请再次从 ASP.NET 用户数据库中获取信息。

    至于声明 - 我认为它们在这里不是一个好主意 - 您实际上不必处理大量不同的授权方案,并且您没有使用任何联合(例如,允许来自不同的公司或域来使用您的服务)-因此这些明显的好处可能并不真正适用于您的情况。

    【讨论】:

    • 感谢您的回复。我不认为 netTcpBinding 是一个选项,因为不幸的是 Web 服务器正在运行 IIS6。传递支持令牌似乎是将登录前端 Web 应用程序的用户的用户名传递给 wcf 服务所需做的事情。但不幸的是我无法设置它,它一定是证书的问题......在这种情况下我是否需要它们,因为消息永远不会离开服务器机器?
    • @skyplusplus:Web 服务器只是充当 WCF 客户端,对,调用 WCF 服务。在这种情况下使用 netTcpBinding 没有问题/问题!唯一的一点是 WCF 服务需要在另一端自托管,而不是托管在 IIS6 中。为了能够使用 netTcpBindign,那一点点额外的努力是值得的!
    • 是的,我想我会这样做,即在 Windows 服务中托管 wcf 服务并使用 netTcpBinding 公开它。没错,只需将用户 ID 添加到标头中就可以了,因为 wcf 服务只能在本地访问,因此调用者是受信任的。干杯
    • 嗨,我只是想知道,由于 asp.net 是一个多线程环境,并且会有多个用户同时请求,我是否需要在 windows 服务中进行任何特殊处理托管 WCF 服务?它能够一次处理多个请求吗?还是我需要实现某种队列并让多个线程处理它?
    • @skyplusplus:不,没什么特别的 - 只需创建一个 ServiceHost 的实例,打开它,然后让 WCF 运行时完成其余的工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 2021-02-15
    相关资源
    最近更新 更多