长时间运行的应用程序中的WCF身份验证会话

3
我有以下情况。
有一个托管在IIS 7上的WCF .NET 4服务。
该服务将被两种类型的客户端访问:
1. Silverlight客户端(稍后将创建) 2. 三个C# .NET 4控制台应用程序(已创建并测试)
为了访问这个WCF服务,我创建了一个简单的包装器dll(我不使用Visual Studio自动生成的引用来避免在多个项目中更新它们,但我使用自动生成的引用作为我的包装器模板)。
这就是我的包装器的样子:
class MyServiceClient : System.ServiceModel.ClientBase<IMyService>,
        IMyService

它基本上将所有调用转发到base.Channel。

现在我们开始考虑实现身份验证。我们的IIS和控制台应用程序不能保证位于同一域中,因此Windows Auth不是可选项。显然,我们将不得不在控制台应用程序的应用程序配置文件中存储用户名/密码,并且WCF将根据我们的用户数据库进行检查。

逐条消息身份验证似乎有点太耗费流量和资源 - 然后我们将不得不在每次调用时从我们的DB中选择用户。我们的控制台应用程序是计划任务,它们可能运行整天并发出数千个WCF请求。因此,我们需要某种经过身份验证的用户会话。

我也担心如果我的System.ServiceModel.ClientBase意外断开连接会发生什么。当前(没有任何身份验证),ClientBase能够重新连接而无需引起任何问题。在添加身份验证实现之后,我希望保持相同的行为。客户端应该能够重新登录而不向调用应用程序抛出任何异常。

据我所知,为了允许所有ASP.NET会话好处在WCF中,我必须以ASP.NET兼容模式运行,并确保每个用户都有自己的线程和自己的Thread.CurrentPrincipal。但我不知道如何确保如果连接中断/服务器重新启动,登录将自动更新。我需要为每个方法调用添加try.catch并且在出现SecurityException时重新登录吗?这似乎是一种有点不好的解决方案。

现在我可以总结两个问题:

我有哪些选项可供在IIS WCF服务和控制台应用程序之间进行经过身份验证的自动恢复会话?

如何以一种方式实现身份验证会话,使得我的WCF服务客户端包装器能够在断开连接时恢复/创建新会话?

如果Silverlight不支持wshttpbinding,并且由于安全原因,WCF不允许通过basichttpbinding传递用户凭据,则如何以安全的方式实现身份验证? 我找到了以下文章: http://www.dotnetcurry.com/ShowArticle.aspx?ID=589,它解释了如何通过自定义绑定使Silverlight使用SSL,但我不知道如何将我的auth会话放入其中,以便它也可以用于控制台应用程序。

1个回答

0
您可以使用SSL证书在WCF应用程序中验证客户端/服务器。实际上,您可以使用SSL证书提供传输级别安全性(因此无需消息加密/解密业务),并且还可以利用证书来验证客户端说出的是谁以及服务器说出的是谁。
这种方法唯一的缺点是您的客户端需要知道您的SSL证书,并且根据您的设置,他们可能也需要一份证书副本。
希望能帮到您!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接