【问题标题】:Best strategy to pass a token / cookie to a WCF service?将令牌/cookie 传递给 WCF 服务的最佳策略?
【发布时间】:2012-01-03 21:51:33
【问题描述】:

我们正在 .net 4.0 上使用 WCF 构建 Web 服务。该服务将主要由 ASP.net MVC 前端使用,但也将由 .net Windows 应用程序使用。

提供的基本用户名/密码身份验证不起作用,因为我们不想保存用户凭据,所以我正在考虑使用 RNGCryptoServiceProvider 进行一次身份验证并创建一个简单的令牌(或者我应该称之为 cookie?)。 GetBytes(),然后使用它来验证进一步的请求。

我研究了使用 WCF 实现安全性的各种常用方法,但它们大多看起来过于复杂,尤其是当我们想要做的只是将 cookie 传递给每个方法调用时。

将这个 cookie 从 WCF 客户端传递到我们的 WCF 服务的最佳策略是什么?首选方法是尽可能与 WCF 的安全架构紧密结合。

到目前为止,我倾向于使用 custom HTTP headers 或 custom authorization,但我不确定哪种方法更合适(如果有的话)。

请记住,对于 ASP 网站,将为每个请求创建一个新通道,而它会在 Windows 应用程序上重复使用。

【问题讨论】:

  • 这与C无关,我正在删除标签。
  • @JoachimPileborg 我只是将其标记为 C# 以表明我对收到的任何代码示例的偏好。我应该在描述中指定这个吗?
  • 错误地将其标记为 C,而不是 C#。您可以根据需要添加标签。
  • 感谢您的提醒!先生,你好。

标签: c# asp.net wcf rest wcf-security


【解决方案1】:

IMO 有两种方法来做 wcf 安全,传输或消息。

您可以在您的应用程序中实现用户名类型身份验证。所以客户端必须填写用户名和密码才能发送消息。 所以客户端的绑定看起来像

<security mode="TransportWithMessageCredential"> 
   <message clientCredentialType="UserName"/>
</security>

在服务器端,您可以实现自己的密码验证器,如 example 所示

这样做会在服务器上验证您的消息,您可以实现任何您想要的密码验证逻辑。使用它,您的消息将使用 ssl 加密,并使用您自己在服务端实现的逻辑进行身份验证。

【讨论】:

  • 这确实是我正在研究的内容,但我有点担心由于为每个传入请求创建新通道而可能遭受的性能损失。对此有什么想法吗?
  • 我认为您不会因为创建新通道而面临任何性能问题,WCF 在大多数情况下都可以解决这个问题
猜你喜欢
  • 2012-04-10
  • 2010-11-08
  • 1970-01-01
  • 2014-09-24
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多