【问题标题】:Pass client info thru web site to WCF Rest service通过网站将客户端信息传递给 WCF Rest 服务
【发布时间】:2011-06-24 02:42:07
【问题描述】:

我需要知道通过我的 ASP.NET 网站将客户信息(身份、区域设置等)传递到我的后端 WCF RESTful Web 服务的最佳方法。我希望该解决方案可以移植(可重复使用)到其他应用程序,因为这种模型在我的组织中非常典型。

这是场景:

  • ASP.NET 网站在 Web 上运行 位于我们周边的服务器 区。
  • WCF 服务应用程序运行在 防火墙后面的应用服务器 我们的内部网络。
  • 客户端(用户)可以在我们的 内部网络或网络时 他/她浏览网站。
  • 网站调用网络服务 索取各种信息或 执行某些任务。
  • Web 服务需要客户端的 为了执行这些信息 操作。

注意:该网站正在使用表单身份验证,而不是冒充用户。因此,使用 WCF 可扩展性(行为、检查器等)传递身份信息或当前文化信息只会为我们提供 Web 服务器的身份和文化,而不是实际客户端。

有什么建议吗?

【问题讨论】:

  • 你在哪里验证客户端?
  • 通过 Web 服务进行表单身份验证,该服务根据后端数据存储验证用户的凭据。如果成功,我会向包含角色等的 Web 应用程序返回一个自定义“用户”对象。正如 Roy 在下面建议的那样,这可以很容易地转换为“票证”,但我仍然需要一种方法将其传递给服务作为我需要的有关客户/用户的其他信息。

标签: asp.net wcf rest soa


【解决方案1】:

这看起来像是联合安全的案例。

基本上,当用户登录时,您会生成一个会话票。这可以是数字或字符串。此票证包含有关用户身份和/或其角色的编码信息,以及过期时间戳。

您将此会话票证传递给您的 REST 调用,然后接收服务器对票证进行解码以获取他需要的信息。如果票证无效(不可解密、过期或没有所需权限),服务器方法将拒绝该操作并返回 401 Unauthorized HTTP 状态。

要实现这一点,您可以依赖 Microsoft 的实现 (wsFederationHttpBinding) 或自行开发,这通常需要较少的努力。

另一个注意事项:要生成和验证票证,您可以创建位于第二个防火墙后面的另一个服务,或者您可以使用内存中的 DLL...但是请确保生成票证并不容易以防网络服务器受到威胁。

【讨论】:

  • 你是怎么传票的?我不想跟踪我的服务背后的会话,所以我宁愿每次调用都传递身份等。请记住,我还需要其他信息,例如区域设置(文化、时区等)。
  • 将所有编码的内容放入票证中。您将票证作为参数传递给 REST 服务。
猜你喜欢
  • 2015-03-06
  • 1970-01-01
  • 2014-02-20
  • 1970-01-01
  • 1970-01-01
  • 2013-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多