RESTful WCF 4 服务中移动客户端的用户身份验证
Posted
技术标签:
【中文标题】RESTful WCF 4 服务中移动客户端的用户身份验证【英文标题】:User authentication for mobile clients in RESTful WCF 4 service 【发布时间】:2011-11-27 04:05:32 【问题描述】:我正在尝试开发一个供移动客户端(目前为 ios 客户端)使用的 Web 服务,我了解到 RESTful 服务比 SOAP 服务更轻量,所以我想尝试一下.
大多数方法都需要身份验证,但我不确定如何处理,因为我读到 REST 应该是无状态的,所以我如何验证从 iOS 访问服务的用户,然后使用该身份验证来验证连续调用其他网络方法?
注意:我将在 IIS 上使用 WCF 4's WebHttp。
谢谢!
【问题讨论】:
是的,我将托管在 IIS 上。 【参考方案1】:有许多相当成熟的模式可以做到这一点。
最简单的方法是提供 username:password 作为授权标头或请求的一部分(查询字符串/表单数据)。这将要求您在每次调用时对用户进行身份验证/授权。也许不适合你,但如果你使用 WebHttp(如果你不是这个意思,我会认真看看WCF Web Api),在 WCF 中构建一个 HttpModule 或其他东西会相当容易通道堆栈拦截调用并验证用户。 一种非常常见的方法是公开一个接受用户:密码并生成 API 令牌的端点。然后,用户获取该 API 令牌并使用它来验证后续调用。该令牌可以是任何东西,从弱加密数据到由共享密钥、HTTP 动词、请求的资源等组成的散列。如果你用谷歌搜索“HMAC 身份验证”,你会发现几个例子。 Azure's authentication schemes 是一个非常精细的令牌示例。这种方法的好处是您有一个端点负责身份验证和构建令牌,而您的其他端点只需要知道如何验证哈希或解密令牌;很好的关注点分离。 如果您希望 API 的使用者是第三方应用程序,OAuth/OAuth2 几乎是事实上的标准。【讨论】:
【参考方案2】:我建议使用类似于 OAuth 的策略。您将专门编写一项服务来验证凭据并分发访问令牌,并且对您的 API 的任何请求都需要有效的访问令牌。
如果您在 IIS 中托管,我在使用 HttpModule 检查所有传入请求以获取有效令牌之前已完成此操作。如果没有,模块只是以 401 Unauthorized Http 状态码结束请求。
编辑:
如果您想在每个操作的基础上进行更细粒度的授权,我建议您使用自定义授权策略。查看http://msdn.microsoft.com/en-us/library/ms731181.aspx了解更多详情。
【讨论】:
以上是关于RESTful WCF 4 服务中移动客户端的用户身份验证的主要内容,如果未能解决你的问题,请参考以下文章
在负载平衡情况下使用 WCF 4.5 RemoteEndpointMessageProperty 获取客户端 IP 地址