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

本文关键字:客户端 用户 身份验证 移动 WCF 服务 RESTful | 更新日期: 2023-09-27 18:10:10

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

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

注意:我将在IIS上使用WCF 4的WebHttp。

谢谢!

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

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

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

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

如果你在IIS中托管,我在使用HttpModule检查所有传入请求的有效令牌之前已经完成了这一点。如果没有,该模块将以401未授权Http状态码结束请求。

编辑:

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