我有一个解决方案分为3个项目。
其中两个是使用ASP.NET身份提供商的MVC 5 Web应用程序。
一个是另一个项目引用的班级库。所有的CRUD行动都在这里进行。
所有项目都指向同一DB,并通过EF运行。
所有业务逻辑都发生在类库中,但用户不可知。用户验证仅在Web应用中发生。这里的问题是用户验证代码在所有Web项目中都重复,并且类库不知道用户调用API。
这种体系结构将很快带来维护噩梦,因此我只希望班级库与DB进行商务逻辑或用户验证。
现在,由于ASP.NET身份提供商在类库中不起作用,因此有人找到了解决方案的方法吗?
我不确定您通过在Web应用程序中具有安全性来指代的"维护噩梦"。将您的应用程序域与安全模型解)是一件好事。您的域模型和业务逻辑可能在某些Web应用程序中保持不变,但是安全模型可能会有所不同。我不会把这些捆绑在一起。如果它在您的类库中,则如何让OWIN安全框架为您处理身份验证。您是否也将在班级库中管理所有这些。
当您引用"用户验证"时,我认为您正在谈论授权。如果您必须在类库中执行授权,我将实现自定义索赔授权管理器。您将覆盖执行授权的检查方法。SimpalSauthorizationManager在您的Web.config中配置了,因此您可以为不同的Web应用程序拥有不同的索赔量化管理器。但是您的课堂库中的逻辑将保持不变。在执行您要插入的操作之前,您要授权用户的任何地方:
ClaimsPrincipalPermission.CheckAccess("MyResource", "MyAction");
传递的资源和操作用于您创建的自定义索赔授权管理器,以了解进行授权的上下文。我讨论了本文中将您的安全模型与您的应用程序域分解的方法。如果授权未通过,则将抛出SecurityException。您可以将此渗透到适当地处理的Web应用程序(在控制器中重定向或Web API的HTTP未经授权错误)。请注意,如果您在非WEB应用程序中也使用类库,则此体系结构将有效。我已经使用了ASP.NET身份,并且效果很好。