【问题标题】:UI Service ~ Main Service AuthenticationUI服务~主要服务认证
【发布时间】:2012-08-29 07:31:12
【问题描述】:

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

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

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

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

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

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

请帮忙!

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,这真是值得深思。我已经进行了一些挖掘,并且传递安全令牌的想法是一个很好的想法。我怀疑时间会成为阻碍因素,我最终会做我在这里提议的事情。不过,它确实期待添加元数据。
    • 很高兴为您提供帮助。过期令牌也很有效,您可以只使用 GUID,只要您有一个后备存储服务的所有实例都可以验证令牌。
    猜你喜欢
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 2012-05-10
    相关资源
    最近更新 更多