UI服务〜主服务认证

时间:2012-08-29 07:31:13

标签: c# .net asp.net-mvc-3 wcf asp.net-membership

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

我正在努力决定/解决的问题是身份验证。我喜欢MembershipProvider,而不喜欢SqlProvider。我们是M $房子,所以我很高兴能走这条路。我想要做的是将登录到UI的用户的身份验证与对实际服务调用的身份验证联系起来。从广义上讲,有两种类型的用户“普通”和“管理员”,我无法决定处理身份验证的最佳方式。

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

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

问题是:什么是最好的方法?我想要 一个服务 i)对每次通话进行身份验证,这样您就无法拨打不允许的内容 - 尽可能优雅地处理 ii)是无状态的,所以我可以扩展/集群服务。 iii)不受客户端的控制,因此可以更换。

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

请帮忙!

1 个答案:

答案 0 :(得分:0)

WCF提供了向SOAP标头添加自定义字段的功能,这允许从消息参数和信息中删除诸如身份验证之类的横切关注点。处理@稍高一点。

但这不是全部。 WCF还允许您加密这些标头,这将阻止它们以纯文本形式通过网络发送。 This blog post由Steven Cheng提供了如何实现这一目标的很好的描述。

您经常会创建一个可以轻松应用于现有服务的自定义合约行为。