【发布时间】:2009-07-01 19:48:14
【问题描述】:
我对 WCF 世界比较陌生,所以我很乐意回答新手问题。我目前正在设计一层 WCF 服务。其中之一是身份验证服务,因此我想出了以下身份验证机制:
IUserService.TryAuthenticateUser(string username, string password, out string key)
基本上,用户会尝试进行身份验证,如果成功 - 他/她会收到一个 sessionkey/securitykey/whateverkey... 然后每个其他“WCF 操作”都需要该密钥,例如
IService.GiveMeMyFeatures(string key);
IService.Method1(string key);
这个机制对我来说看起来非常直观,也很容易实现,所以困扰我的是为什么我找不到类似的 WCF 示例?然后,根据应用程序的体系结构,可以从各种应用程序中使用这个唯一密钥(实际上是具有 wcf 端过期和所有的会话密钥):对于 ASP.NEt,它可以存储在 cookie 中,对于 Winform/WPF/移动我猜它可以存储在form-class中的一个字段等等...
那么问题一来了:你觉得这个方法怎么样?
我还读到,我可以使用内置的 ASP.NET 身份验证服务(如果我理解正确,可以使用会员提供程序等)。从体系结构的角度来看,我不太喜欢这种方法,因为从 ASP.NET 页面进行身份验证时,工作流程将如下所示: ASP.NET -> WCF -> ASP.NET 身份验证服务 -> 响应
在这种情况下,也可以绕过 WCF 层并调用 auth.服务方法直接来自 asp.net 页面。我知道通过 WCF 层处理每个身份验证请求会损失一些性能,但对我来说拥有一个好的分层架构很重要......
这里是第 2 个问题:与第一个方法相比,这种方法有哪些优点/缺点,为什么它如此受欢迎,从架构的角度来看它有点错误?
我还读到,我可以为每个 WCF 方法调用发送用户凭据,并使用内置机制进行身份验证并正确响应请求。
Q3:如果采用这种方法,你怎么看?
总结一下 - 显然有很多身份验证方法,但您认为哪一种是最好的和最通用的(考虑到 WCF 服务将从 asp.net/wpf/mobile/etc... 调用)?
先谢谢了 :)
【问题讨论】:
标签: c# .net wcf authentication