C# Web和类库项目之间的共享身份验证

C# Web和类库项目之间的共享身份验证,c#,asp.net-mvc,entity-framework,asp.net-mvc-5,asp.net-identity,C#,Asp.net Mvc,Entity Framework,Asp.net Mvc 5,Asp.net Identity,我有一个分为3个项目的解决方案。 其中两个是使用ASP.Net身份提供程序的MVC 5 web应用程序。 一个是被其他项目引用的类库。所有积垢都发生在这里 所有项目都指向同一数据库,并通过EF进行操作 所有的业务逻辑都发生在类库中,但用户不可知。用户验证仅在web应用程序中进行。这里的问题是用户验证代码在所有web项目中重复,类库不知道用户调用API。 这种体系结构很快就会带来维护噩梦,因此我只希望类库与db进行业务逻辑或用户验证。 现在,由于ASP.Net身份提供程序在类库中不起作用,有人找到

我有一个分为3个项目的解决方案。
其中两个是使用ASP.Net身份提供程序的MVC 5 web应用程序。
一个是被其他项目引用的类库。所有积垢都发生在这里

所有项目都指向同一数据库,并通过EF进行操作

所有的业务逻辑都发生在类库中,但用户不可知。用户验证仅在web应用程序中进行。这里的问题是用户验证代码在所有web项目中重复,类库不知道用户调用API。
这种体系结构很快就会带来维护噩梦,因此我只希望类库与db进行业务逻辑或用户验证。
现在,由于ASP.Net身份提供程序在类库中不起作用,有人找到了解决方法吗

我不确定您所指的web应用程序中的安全性是什么“维护噩梦”。将应用程序域与安全模型分离是一件好事。在某些web应用程序中,您的域模型和业务逻辑可能保持不变,但安全模型可能会有所不同。我不会把这些捆在一起。如果它在类库中,您将如何让OWIN安全框架为您处理表单身份验证。您是否也要在类库中管理所有这些内容

当您提到“用户验证”时,我假设您所说的是授权。如果您必须在类库中执行授权,我将实现一个自定义。您将重写该方法以执行授权。ClaimsAuthorizationManager在web.config中配置,因此您可以为不同的web应用程序配置不同的ClaimsAuthorizationManager。但是类库中的逻辑将保持不变。在执行要插入的操作之前,要授权用户的任何位置:

ClaimsPrincipalPermission.CheckAccess("MyResource", "MyAction");

传递的资源和操作用于您创建的自定义ClaimsAuthorizationManager,以了解授权发生的上下文。我谈论这个方法。如果授权失败,将引发SecurityException。您可以让它渗透到您的web应用程序中,并在其中进行适当的处理(在控制器中重定向或针对web APi的HTTP未授权错误)。请注意,如果您在非web应用程序中也使用类库,则此体系结构将起作用。我在ASP.NET Identity中使用了此选项,效果很好。

是什么让您觉得简单的成员资格提供程序在类库项目中不起作用?抱歉,Ben。它的Asp.Net身份提供程序在我的项目中。不是简单的成员资格提供者。相应地更新了我的问题。在这种情况下,ASP.NET标识的问题相同。没有理由不能将其添加到类库中。