2011-11-22 98 views
5

我们正在用.net 4.0上的WCF构建一个Web服务。该服务将主要由ASP.net MVC前端使用,但也会被.net Windows应用程序使用。将令牌/ cookie传递给WCF服务的最佳策略?

提供的基本用户名/密码auth不会执行,因为我们不想保存用户凭据,所以我考虑使用RNGCryptoServiceProvider创建一个简单的令牌(或者我应该称之为cookie?) .GetBytes(),然后使用它来验证进一步的请求。

我已经研究过各种常用方法做保障与WCF,他们大多显得过于复杂,尤其是当我们想要做的基本上是通过cookie来每一个方法调用。

什么是从WCF客户对我们的WCF服务通过这个cookie的最佳策略是什么?首选方法将尽可能与WCF的安全架构紧密结合。

到目前为止,我倾向于使用custom HTTP headerscustom authorization,但我不相信哪种方法更合适(如果有的话)。

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

+1

这与C无关,我正在移除标记。 –

+0

@JoachimPileborg我只会给C#添加标签,以表示我对收到的任何代码示例的偏好。我应该在说明中指定这个吗? –

+0

错误地将它标记为C,而不是C#。如果需要,您可以添加标签。 –

回答

3

IMO有两种方法可以做wcf安全,运输或Messsage。

您可以在应用程序中实现用户名类型认证。所以客户端必须填写发送消息的用户名和密码。 所以在客户端结合会是什么样子

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

在服务器端,你可以实现你自己的密码验证,如本example

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

+0

这确实是我正在研究的内容,但我有点担心由于为每个传入请求创建新通道,可能会导致性能下降。对此有何想法? –

+1

我不认为你会因为创建新频道而面临任何性能问题WCF在大多数情况下都能够照顾到这一点 –