如何对 WCF 4 RESTful 服务进行身份验证?

Posted

技术标签:

【中文标题】如何对 WCF 4 RESTful 服务进行身份验证?【英文标题】:How to do authentication on a WCF 4 RESTful service? 【发布时间】:2011-09-03 12:28:03 【问题描述】:

我目前正在设计和开发将由移动设备使用的 WCF 4 RESTful 服务。我特别选择了 REST,因为它被认为是轻量级的,而且 JSON 输出使移动客户端的解析变得简单。

该服务负责整个应用程序的移动设备部分。但是,它要求用户在使用该服务之前登录。基本的 HTTP 身份验证不是一种选择:它不安全,中间人攻击很容易拦截用户帐户。 SSL 在这里是一个选项,但我不知道 SSL 在 WCF RESTful 服务上工作的容易程度以及在移动设备上实现的简单程度。

我研究了摘要式身份验证,但我真的找不到任何关于如何实现它的好信息。这也带来了:我将如何允许用户将设备添加到他们的帐户中?将用户名/密码组合与其他信息一起散列到 Digest 标头中?

有人能解释一下吗?因为我一头雾水。网上有很多关于如何实现 WCF (RESTful) 服务的信息,但是当您需要保护它时,信息量会大大减少……欢迎文章。

【问题讨论】:

这是重复的吗? ***.com/questions/6021612/… 【参考方案1】:

在 WCF 中利用 SSL 非常简单,此时每个移动平台都应该支持。恕我直言,您绝对应该使用 SSL 进行基本身份验证,以使您的生活尽可能简单。

在 WCF 服务上启用 HTTPS 所需要做的就是:

<webHttpBinding>
    <binding name="MyBinding">
        <security mode="TransportCredentialOnly">
           <transport clientCredentialType="Basic" />
        </security>
    </binding>
</webHttpBinding>

这将表示“仅允许通过安全传输访问此服务并期望通过基本身份验证凭据”。

现在,唯一的问题是,您在哪里托管 WCF 服务?如果托管在 IIS 中,您只需使用它配置服务证书即可。

另一种选择是使用 F5 设备或类似设备预先执行 SSL。然后你必须做更多的工作,因为默认情况下,WCF 不会让你通过非安全传输传递凭据。然后您需要自定义您自己的绑定并在TransportSecurityBindingElement 上设置AllowInsecureTransport = true。这基本上会对 WCF 说“相信我,我在做正确的事”,并允许服务正确初始化,即使凭据将流经非安全绑定。

【讨论】:

这个想法是在 IIS 中托管服务。我目前正在使用不支持 SSL 的 ASP.NET 开发服务器开发它。但是,我明天会推出一个测试服务+移动客户端,看看它是否有效。我将生成自己的证书,将其导入手机并在 IIS 中链接。

以上是关于如何对 WCF 4 RESTful 服务进行身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

WCF、RESTful Web 服务和自定义身份验证

如何使用用户名/密码 + SSL 使用 WCF 配置安全 RESTful 服务

如何在 Restful WCF 服务中管理会话

Restful风格wcf调用4——权限认证

使用 WCF 创建需要身份验证并使用 JSON 作为输入/输出格式的 RESTful Web 服务

如何对 WCF 数据服务进行身份验证?