0

我正在设计(是的,仍然在设计)一种架构,我们有一个主要的服务来做事情。验证用户、导入数据和获取结果等。我们还有一个 ASP MVC3 UI 模块与之交互。这里的关键是,将来它可能是 SharePoint 或只是使用该服务的批量导入器应用程序,因此必须注意,但现在它是 ASP MVC3。

我正在努力决定/了解的是身份验证。我更喜欢 MembershipProvider,而不是喜欢 SqlProvider。我们是一家 M$ 房子,所以我很高兴沿着这条路走下去。我想要做的是将登录到 UI 的用户的身份验证与实际服务调用的身份验证联系起来。大致有两种类型的用户“普通”和“管理员”,我无法决定最优雅的身份验证方式。

我真的很喜欢我所拥有的。WCF 服务提供的 SqlProvider 和对服务调用的访问也都与它相关联(我需要整理一下,因为目前所有服务调用都被配置锁定,而不是按服务合同锁定)。

这样做的问题是您必须通过明文传递用户名和密码,并防止您进入证书世界 - 我在这里的研究表明开发证书是坏的,真正的证书很昂贵,所以如果是真的,两者都不是一个选项。

问题是:最好的方法是什么?我想要一个服务,i)在每次调用时都进行身份验证,这样你就不能调用你不允许的东西——尽可能优雅地处理 ii)是无状态的,所以我可以扩展/集群服务。iii) 不受客户端控制,因此可以更换。

证书的替代方案我想到了对服务的登录调用,该服务返回某种令牌,随后与其他调用一起传递并使用自定义主体提供程序进行身份验证。这样做的优点是我可以在 UI 和服务之间使用 Windows 加密,并为角色传递身份验证。我想避免做的是在每个调用的参数中传递 u/n 细节,因为这看起来很难看。

请帮忙!

4

1 回答 1

0

WCF 提供了向 SOAP 标头添加自定义字段的能力,这允许将身份验证等横切关注点从消息参数中提取出来并在稍高的级别进行处理。

但这还不是全部。WCF 还允许您加密这些标头,这将防止它们以纯文本形式通过网络发送。Steven Cheng 的这篇博文很好地描述了如何实现这一点。

本质上,您将创建一个可以轻松应用于现有服务的自定义合同行为。

于 2012-08-29T13:30:27.750 回答