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

时间:2011-09-28 19:43:03

标签: c# .net wcf rest restful-authentication

我正在尝试开发一个供移动客户端使用的Web服务(暂时是iOS客户端),我读到RESTful服务比SOAP服务轻得多,所以我想尝试一下这个

大多数方法都需要身份验证,但我不知道如何处理这个问题,因为我读取REST应该是无状态的,那么如何验证从iOS访问服务的用户然后使用该身份验证来验证连续调用其他网络方法?

注意:我将在IIS上使用WCF 4's WebHttp

谢谢!

2 个答案:

答案 0 :(得分:6)

有许多相当成熟的模式可以做到这一点。

  • 最简单的方法是提供用户名:密码作为授权标头或请求的一部分(查询字符串/表单数据)。这将要求您在每次通话时对用户进行身份验证/授权。也许并不适合你,但是如果你正在使用WebHttp(如果你不是这个意思,我会认真看看WCF Web Api),那么构建一个HttpModule或其他东西会相当容易WCF通道堆栈拦截调用并验证用户。
  • 一种非常常见的方法是公开一个获取用户:密码并生成API令牌的端点。然后,用户获取该API令牌并使用它来验证后续调用。该令牌可以是从弱加密数据到由共享密钥,HTTP动词,请求资源等组成的散列中的任何内容。如果您使用谷歌“HMAC身份验证”,您将找到几个这样的示例。 Azure's authentication schemes是一个非常精细的令牌的示例。这种方法的好处在于,您有一个关注身份验证和构建令牌的端点,而您的其他端点只需要知道如何验证哈希或解密令牌;关注点很好。
  • 如果您希望API的使用者成为第三方应用程序,OAuth / OAuth2几乎是事实上的标准。

答案 1 :(得分:0)

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

如果您在IIS中托管,我在使用HttpModule检查有效令牌的所有传入请求之前已完成此操作。如果没有,则模块仅使用401 Unauthorized Http状态代码结束请求。

编辑:

如果您希望在每个操作的基础上进行更细粒度的授权,我建议您使用自定义授权策略。查看http://msdn.microsoft.com/en-us/library/ms731181.aspx了解详情。