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

时间:2015-06-25 15:34:05

标签: c# authentication rabbitmq wif amqp

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

作为UI客户端,我计划制作WPF客户端,ASP.Net以及未来的iPhone / Android。 作为消息代理,我使用RabbitMQ(客户端仅通过AMQP与业务层进行通信。由于优点,我有多个业务层用于循环调度)。

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

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

如果WIF能够满足我的需求,那么处理这个问题的最佳方法是什么? 我是否必须实现自定义STS并将其置于WCF服务中?

1 个答案:

答案 0 :(得分:1)

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

MQ的一个普遍问题是,它们与任何元信息(例如HTTP标头)分离,以注入身份验证。相反,您应该在邮件中提供属性Session(带有预身份验证)或UserNamePassword(后者不会优先使用,因为凭据是以普通方式传递的)。可以使用内置SessionFeature ServiceStack的示例解决方案in their documentation

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

另外:您打算如何使用Android排队邮件?你能否将内部MQ暴露给外部,是否有可用于Android的客户端?因此,我建议通过HTTP使用双端点来在您选择使用的任何MQ中对消息进行排队。有关如何在您的HTTP服务中集成MQ的更多信息可用in the documentation

使用ServiceStack,您可以像is a plain communication without all the serivce stuff available一样旋转所需的消费者实例。

Trivia:当我正在撰写关于掌握ServiceStack 的即将出版的书时,我有点偏颇。尽管如此,我确实在书中涵盖了你的大多数问题,并提供了代码示例:你的场景中的比特are already covered here(不要被特定的MQ吓坏,它们是可以互换的)。