授权标记无法在不同的DLL

时间:2015-06-25 10:45:32

标签: c# .net security asp.net-web-api asp.net-identity

我有两个项目

  • Web Api
  • DLL类库

Web Api引用DLL中的类和方法。 Web Api也使用开箱即用的ASP.NET身份来保证安全。

Web Api控制器方法使用[Authorize]标签进行保护,如下所示:

[Authorize]
[HttpGet]        
[Route("", Name = "GetStuff")]        
public IHttpActionResult Get()        
{            
List<Stuff> Stuffs= LookUpBusinessLogic.StuffGetAll();            
return Ok(Stuffs);        
}

DLL也有这些标签保护其方法调用:

[Authorize]
public static List<Stuff> StuffGetAll()        
{
//Get data from somewhere
...            
return Stuffs;        
}

我面临的问题是授权标记在DLL方法中不起作用。

我可能完全不知道调用用户的身份是如何传递的。我想问一下:

调用用户身份是否在DLL之间传递?

如果没有办法在我的示例中基于用户身份保护DLL方法?

1 个答案:

答案 0 :(得分:0)

[Authorize]是一个仅应与操作方法一起使用的属性。它不会为您的自定义静态方法触发。

看看它的签名:

[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Method, Inherited = true, 
AllowMultiple = true)]
public class AuthorizeAttribute : FilterAttribute, IAuthorizationFilter

由于它继承自FilterAttribute,因此您知道它可以被触发,例如适用于OnActionExecutingOnActionExecuted过滤方法。

您的代码正在编译,因为此属性允许在方法中使用。这并不意味着它在控制器上下文之外使用时具有任何功能。

说实话,我不明白你是否需要允许特定用户访问DLL。如果这是某种类库,则应仅在使用外部DLL方法的类中检查访问权限。