N 层应用程序身份验证(RabbitMQ 作为代理,C# 作为业务层)- WIF 可能吗?

N-Tier Application Authentication (RabbitMQ as Broker and C# as Business Tier) - WIF possible?

我目前正在开发一个以 C# 作为业务层的 N 层应用程序。这是一种 ERP,我需要为此应用程序进行身份验证 (email/password)。 我还需要基于登录的权限(创建订单、删除文章) 所有这些信息都应该存储在一个数据库中。

作为 UI 客户端,我计划制作 WPF 客户端,ASP.Net 并且可能在将来 iPhone/Android。 作为消息代理,我使用 RabbitMQ(客户端仅通过 AMQP 与业务层通信。由于优势,我有多个业务层用于循环调度)。

在我对 N 层应用程序中的身份验证的研究中,我发现了一个针对 Windows Identity Foundation 的建议。 WIF 对我来说是全新的。我找到的所有示例仅处理 ASP.Net 个应用程序。

我现在的问题是: WIF 对我来说是正确的还是我应该自己实现这个会话处理?

如果 WIF 可以满足我的需求,那么最好的处理方法是什么? 我是否必须实施自定义 STS 并将其放置在 WCF 服务中?

正如您明确提到 RabbitMq,我建议您使用 ServiceStack 作为您的服务接口。

通常 MQ 的一个问题是它们与任何元信息(例如 HTTP Headers 分离以注入身份验证。相比之下,您应该在消息中提供 属性 Session(带预身份验证)或 UserNamePassword(不首选后者,因为已通过凭据简而言之)。 built-in SessionFeature ServiceStack 的示例解决方案可用 in their documentation.

ServiceStack 的另一个不错的功能是您不仅可以使用 AuthenticateAttribute 装饰您的处理程序,还可以使用 RequiredRoleAttributeRequiredPermissionAttribute.

另外:您打算如何 queue 一条带有 Android 的消息?您能否将内部 MQ 暴露给外部,是否有客户端可用,例如 Android?因此,我建议在您选择使用的任何 MQ 中使用双端点通过 HTTP 发送 queue 消息。有关如何在 HTTP 服务中集成 MQ 的更多信息,请参阅 in the documentation

使用 ServiceStack,您可以根据需要旋转任意数量的消费者实例,is a plain communication without all the serivce stuff available

琐事:因为我正在撰写一本即将出版的关于 Mastering ServiceStack 的书,所以我有点偏见。尽管如此,我确实在书中涵盖了你的大部分问题,并提供了代码示例:你的场景的点点滴滴 are already covered here(不要被特定的 MQ 吓到,它们是可以互换的)。