【问题标题】:WCF authentication serviceWCF 身份验证服务
【发布时间】: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


    【解决方案1】:

    您找不到示例的原因不是最佳实践 - 它正在将应该是无状态的 Web 服务变成有状态的东西,以及根本无法很好地进行负载平衡的东西。

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

    【讨论】:

    • +1 - 使用“每次通话”方案绝对是您的最佳选择 - 每个通话都与前一个通话分开,通话之间不共享任何内容。
    • 嗯,我想我解释错了。我不想在通话之间共享信息,我只想确保通话来自有效用户。我不喜欢每次通过网络发送密码的想法,因此我提出了“抽象”密钥概念......我稍微改进了这个想法 - 仍然使用 UserService 从用户名和密码中获取密钥,但是然后而不是将密钥作为参数传递给每个 wcf 方法 - 只需使用自定义凭据
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多