C# 移动设备上多平台的WCF安全实现

C# 移动设备上多平台的WCF安全实现,c#,wcf,security,rest,mobile,C#,Wcf,Security,Rest,Mobile,我们目前有一大堆WCF REST服务,这些服务都暴露在互联网上。多个移动设备使用这些服务iOS、Android、Symbian等,以及一系列跨平台解决方案 我们做的第一件事就是确保所有内容都通过SSL运行。但是,我需要确保调用这些REST服务的设备经过身份验证才能这样做。例如,如果我有一个RetrieveBalance POST,它获取身体中的人的ID号,任何人都可以用其他ID号调用此方法并获得他们的余额 例如,在检索此人的余额之前,我需要每次通话基本上根据用户名和密码/pin进行身份验证 在W

我们目前有一大堆WCF REST服务,这些服务都暴露在互联网上。多个移动设备使用这些服务iOS、Android、Symbian等,以及一系列跨平台解决方案

我们做的第一件事就是确保所有内容都通过SSL运行。但是,我需要确保调用这些REST服务的设备经过身份验证才能这样做。例如,如果我有一个RetrieveBalance POST,它获取身体中的人的ID号,任何人都可以用其他ID号调用此方法并获得他们的余额

例如,在检索此人的余额之前,我需要每次通话基本上根据用户名和密码/pin进行身份验证

在WCF REST中有没有一种方法可以跨多种不同的平台执行类似的操作?我的想法是在标题中添加用户名和密码,然后使用以下命令在服务器上获取:

 var username = WebOperationContext.Current.IncomingRequest.Headers["Username"];
 var pwd = WebOperationContext.Current.IncomingRequest.Headers["Password"];

有更好的方法吗?

如果您使用的是HTTPS,您可以使用-如果您在IIS中托管服务,则使用自定义用户名和密码验证会有点棘手,默认实现需要windows帐户,但可以通过。自托管服务不存在此问题,因为您可以实现。

如果您正在使用,则使用自定义用户/通行证验证程序实现基本用户/通行证凭据类型,无需IIS模块。如果您不能做到这一点,最简单的方法就是将用户名和密码参数添加到每个服务方法中,并在每次调用时验证它们。粗糙但应该有效。

我不想降低您答案的可信度,但我认为OP可能会询问不同平台的客户端如何在WCF的RESTful服务中传递用户名和密码。可能是因为某些客户端可能没有可用的配置文件或程序集来通过服务中的验证。我的服务托管在IIS中。我非常怀疑我是否能够使用任何IIS模块,特别是由于连接设备的不同性质。身份验证需要发生在代码背后的某个地方。@JohnIsaiahCarmona:是通过HTTP发送凭据的标准化过程-RESTful服务通过HTTP运行。这只是在授权HTTP头中传递凭据的标准方式。我希望不同平台上的大多数HTTP客户端API已经实现了这种支持。@Dylan:自定义模块在服务器端IIS上运行,它对您的客户端设备是完全透明的-他们根本不知道该模块。这只是请求处理中的另一个组件,它只负责在将请求传递给您的服务之前验证凭据。是否需要这样做?