问题描述
|
我目前正在设计和开发将由移动设备使用的WCF 4 RESTful服务。我之所以特别选择REST,是因为它据说是轻量级的,并且JSON输出使移动客户端的解析变得简单。
该服务负责整个应用程序中的移动设备部分。但是,这要求用户登录后才能使用该服务。基本的HTTP身份验证不是一种选择:它是不安全的,中间人攻击很容易拦截用户帐户。 SSL是这里的一个选项,但是我不知道SSL在WCF RESTful服务上如何轻松工作,以及在移动设备上实现的难度如何。
我已经研究过摘要式身份验证,但是我真的找不到关于如何实现它的任何好的信息。这还带来了一个问题:我该如何允许用户以此向其帐户添加设备?将用户名/密码组合与其他信息一起哈希到Digest标头中吗?
有人可以阐明这一点吗?因为我很糊涂。网上有很多有关如何实现WCF(RESTful)服务的信息,但是一旦您需要保护它,信息量就会大大减少。
解决方法
在WCF中,利用SSL非常简单,因此每个移动平台都应支持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说“相信我,我正在做正确的事”,并允许服务适当地初始化,即使凭据将通过非安全绑定流动。