WCF身份验证服务

时间:2009-07-01 19:48:14

标签: c# .net wcf authentication

我对WCF世界相对较新,所以我的applogies为新手问题。我目前正在设计一层WCF服务。其中一个是身份验证服务,所以我提出了以下身份验证机制:

IUserService.TryAuthenticateUser(string username, string password, out string key)

基本上,用户尝试进行身份验证,如果成功,他/她会收到一个sessionkey / securitykey / whateverkey ......然后,每个其他“WCF操作”都需要密钥,例如

IService.GiveMeMyFeatures(string key);
IService.Method1(string key);

这个机制对我来说看起来非常直观,也很容易实现,所以困扰我的是为什么我找不到类似的WCF示例?根据应用程序的体系结构,这个唯一的密钥(实际上是一个具有wcf-side expiration的会话密钥和所有密钥)可以从各种应用程序中使用:对于ASP.NEt它可以存储在cookie中,用于Winform / WPF /移动我想它可以存储在字段中的表单类中等等......

所以这里有问题1:您如何看待这种方法?

我还读过,我可以使用内置的ASP.NET身份验证服务(使用成员资格提供程序等...如果我理解正确的话)。从架构的角度来看,我真的不喜欢这种方法,因为从ASP.NET页面进行身份验证时,工作流程将如下所示: ASP.NET - > WCF - > ASP.NET身份验证服务 - >响应

在这种情况下,还可以绕过WCF层并调用auth。服务方法直接来自asp.net页面。我知道通过WCF层获取每个身份验证请求,我将失去一些性能,但对我来说,拥有一个漂亮的分层架构非常重要......

这里是第2个问题:这个方法比第一个有什么优点/缺点,为什么它如此受欢迎,从架构的角度来看它有点不对?

我还读到,我可以为每个WCF方法调用发送用户凭据,并使用内置机制对请求进行身份验证和响应。

问题3:如果这种方法怎么看?

总而言之 - 显然有很多身份验证方法,但您认为哪一种最佳且最通用(考虑到将从asp.net/wpf/mobile/etc调用WCF服务...)?

谢谢你提前:)

1 个答案:

答案 0 :(得分:5)

您找不到示例的原因并非最佳做法 - 它正在将无状态,Web服务转变为有状态的东西,以及根本无法实现平衡的东西。

由于Web服务已经具有标准的用户名和密码功能,几乎每个SOAP堆栈(不包括Silverlight)都支持这种方式。您也可以使用基于标准.NET角色的安全模型来使用此方法保护您的方法。