传递令牌/cookie给WCF服务的最佳策略是什么?

5

我们正在使用.net 4.0上的WCF构建Web服务。该服务主要将由ASP.NET MVC前端使用,但也将由.NET Windows应用程序使用。

基本的用户名/密码验证无法胜任,因为我们不想保存用户凭据,因此我考虑进行一次身份验证并使用RNGCryptoServiceProvider.GetBytes()创建一个简单的标记(或者我应该称其为cookie?),然后使用该标记进一步验证请求。

我已经研究了WCF安全性的各种常见方法,它们大多数看起来过于复杂,特别是当我们只想做的实质上是将cookie传递给每个方法调用时。

从WCF客户端到我们的WCF服务传递此cookie的最佳策略是什么?首选方法应尽可能紧密地与WCF的安全体系结构耦合。

到目前为止,我倾向于使用自定义HTTP标头自定义授权,但我不确定哪种方法更合适(如果有的话)。

请记住,对于ASP网站,每个请求都将创建一个新通道,而在Windows应用程序中将重复使用该通道。


1
这与C语言无关,我正在删除标签。 - Some programmer dude
@JoachimPileborg 我只是标记了C#,以表明我更喜欢收到任何代码示例。我应该在描述中指定吗? - CB-Dan
你错误地标记为C,而不是C#。如果你想的话,可以添加标签。 - Some programmer dude
1
谢谢你提醒我!祝您有美好的一天,先生。 - CB-Dan
1个回答

3

在WCF安全方面,有两种方法:传输或消息。您可以在应用程序中实现用户名类型身份验证。因此,客户端必须填写用户名和密码才能发送消息。客户端的绑定将如下所示:

<security mode="TransportWithMessageCredential"> 
   <message clientCredentialType="UserName"/>
</security>

在服务器端,您可以实现自己的密码验证器,如此示例所示。

这样做将在服务器上对您的消息进行身份验证,您可以为密码验证实现任何逻辑。使用此功能,您的消息将使用 SSL 加密并在服务端使用您自己实现的逻辑进行身份验证。


这确实是我正在研究的内容,但我有点担心为每个传入请求创建新通道可能会影响性能。你对此有什么想法吗? - CB-Dan
1
我认为你不会因为创建新通道而遇到任何性能问题,因为在大多数情况下,WCF都能够很好地处理它。 - np-hard

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