如何在 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 请求中发送长字符串参数?

如何在 WCF RESTful 服务上启用 HTTPS?

如何使用用户名/密码 + SSL 使用 WCF 配置安全 RESTful 服务

如何使用 post/put WCF RestFul Service

如何对 WCF 4 RESTful 服务进行身份验证?

如何删除 RESTful WCF 服务中的“.svc”扩展名?