C# RESTful WCF 4服务中移动客户端的用户身份验证

C# RESTful WCF 4服务中移动客户端的用户身份验证,c#,.net,wcf,rest,restful-authentication,C#,.net,Wcf,Rest,Restful Authentication,我正在尝试开发一个供移动客户端(目前为iOS客户端)使用的web服务,我了解到RESTful服务比SOAP服务轻得多,所以我想尝试一下 大多数方法都需要身份验证,但我不确定如何处理,因为我知道REST应该是无状态的,所以如何验证从iOS访问服务的用户,然后使用该身份验证来验证对其他web方法的连续调用 注意:我将在IIS上使用 谢谢大家! 我建议使用类似于OAuth的策略。您将专门编写一个服务来验证凭据和分发访问令牌,并要求对API的任何请求使用有效的访问令牌 如果您在IIS中托管,我在使用Ht

我正在尝试开发一个供移动客户端(目前为iOS客户端)使用的web服务,我了解到RESTful服务比SOAP服务轻得多,所以我想尝试一下

大多数方法都需要身份验证,但我不确定如何处理,因为我知道REST应该是无状态的,所以如何验证从iOS访问服务的用户,然后使用该身份验证来验证对其他web方法的连续调用

注意:我将在IIS上使用


谢谢大家!

我建议使用类似于OAuth的策略。您将专门编写一个服务来验证凭据和分发访问令牌,并要求对API的任何请求使用有效的访问令牌

如果您在IIS中托管,我在使用HttpModule检查所有传入请求以获取有效令牌之前已经完成了这项工作。如果没有,模块只会以401未经授权的Http状态代码结束请求

编辑:


如果您想在每个操作的基础上进行更细粒度的授权,我建议使用自定义授权策略。查看更多详细信息。

有许多相当成熟的模式可用于此操作

  • 最简单的方法是提供username:password作为授权头或请求的一部分(querystring/formdata)。这将要求您在每次通话中对用户进行身份验证/授权。也许对您来说并不理想,但是如果您使用WebHttp(如果您不是这个意思,我会认真考虑),那么在WCF通道堆栈中构建一个HttpModule或其他东西来拦截调用和验证用户是相当容易的
  • 一种非常常见的方法是公开接受user:password并生成API令牌的端点。然后,用户使用该API令牌对后续调用进行身份验证。该令牌可以是任何内容,从弱加密的数据到由共享密钥、HTTP谓词、请求的资源等组成的散列。如果您搜索“HMAC身份验证”,您会发现几个例子。是一个真正细粒度令牌的示例。这种方法的好处在于,您有一个端点负责身份验证和构建令牌,而您的其他端点只需要知道如何验证哈希或解密令牌;关注点的良好分离
  • 如果您希望API的使用者是第三方应用程序,那么OAuth/OAuth2几乎就是事实上的标准
是的,我将在IIS上托管。