如何在 Restful WCF 服务中管理会话
Posted
技术标签:
【中文标题】如何在 Restful WCF 服务中管理会话【英文标题】:How to Manage Sessions in Restful WCF Service 【发布时间】:2011-05-22 20:46:26 【问题描述】:我想使用我的 Restful WCF 服务的客户端应用程序管理会话。客户端应用程序可以是 J2me 应用程序或 .NET 应用程序。
在 RESTFUL WCF 服务中维护会话的推荐方法是什么?
想法是识别请求来自已通过身份验证的客户端。
【问题讨论】:
【参考方案1】:这个问题可能对你有用:Best Practices for securing a REST API / web service
我认为他们在这里做的最安心的事情是在每个请求上发送用户凭据,前提是您可以以对用户透明且不损害凭据的方式这样做。如果做不到这一点,仅用于维护客户端身份的 cookie 已成为 RESTful 服务开发人员的共同让步。只是不要用 cookie 存储任何其他内容。
【讨论】:
【参考方案2】:REST 定义交互是无状态的,服务器上不维护客户端状态,因此您希望摆脱 RESTful 接口。
我无法想象您希望在提供 WCF 服务的服务器上维护客户端状态的情况。我认为您需要查看您的架构,因为您可能会给自己带来很多技术债务。
【讨论】:
我的服务将对移动应用程序和标准 asp.net 应用程序以及未来的一些 flex 和 silverlight 开放。我的服务也有一种验证用户的方法。我在 WCF 中还有其他几种方法好吧,但是一旦通过身份验证,我不希望为每个请求再次发送用户凭据。我认为向标头添加 cookie 可能会解决此问题。正如您所说,这违反了使用 REST 的原则,您能否推荐其他好的方法来维护每个请求的用户身份。 @Kunal :我同意上面的@stinkymatt,方法是在每个请求中发送凭据。也就是说,除非您使用固有的协议身份验证(即 HTTP 身份验证),否则您将提供的凭据与后备存储进行比较。如果您随后生成一个会话 ID 以传回,您可能会将其保存在同一个后备存储中。当下一个请求到达时,您会将令牌与后备存储进行比较,以查看用户是否已通过身份验证...与原始身份验证请求完全相同,因此您只需添加创建和存储 ID 的工作。以上是关于如何在 Restful WCF 服务中管理会话的主要内容,如果未能解决你的问题,请参考以下文章
WCF RESTful 服务:如何在 POST 请求中发送长字符串参数?
如何使用用户名/密码 + SSL 使用 WCF 配置安全 RESTful 服务