分布式应用程序中的ASP.NET WebAPI客户端授权

时间:2013-09-30 22:57:48

标签: wcf security asp.net-web-api authorization n-tier-architecture

我正在创建一个分布式应用程序,它将使用ASP.NET Web API来支持单页面Web应用程序(SPA)和其他潜在的本机移动应用程序平台。我当前的架构使用Thinktecture Identity Server作为STS,它将为我的客户端提供授权令牌以用于访问WebAPI。在后端,我将拥有持久性和业务逻辑,这些逻辑将由我的WebAPI在单独的应用程序域中由WCF服务公开。 WebAPI将调用服务层来访问数据并对域执行操作。

我的问题是授权。我将使用基于声明的授权,并可以从我的WCF公开业务层增加关于用户的域数据的声明列表。但是我应该在哪里执行授权?使用.NET 4.5,ASP.NET现在有一个可扩展的模型,使我能够将授权逻辑从我的控制器分离到一个单独的授权模块 - 使用ClaimsAuthorizationManager。此外,Thinktecture.IdentityModel在我的WebAPI应用程序中提供所有管道工作方面做得非常好。但是,我不禁想到授权逻辑应该位于我的业务层中,在WCF服务之后,并且面向客户端的WebAPI不应该负责执行此操作。我是否应该要求其他面向托管应用程序的客户端使用我的基于WCF的业务层,那么他们还需要实现安全代码。在缺点方面,它确实意味着未经授权的请求在被拒绝之前会进入应用程序。

问题:我应该在ASP.NET中使用基于声明的授权功能,还是应该在WCF服务后面的业务层包装授权?

1 个答案:

答案 0 :(得分:1)

如果可能,您应该始终尝试使用您使用的框架授予您的授权工具。在微软的情况下,它是基于声明的授权。好处是,您将授权逻辑隔离在自己的层中,而不是在业务逻辑中。

基于声明的授权是许多授权方法之一。另一种方法是使用XACML。我最近为开发人员(尽管是Java开发人员)发表了关于XACML的演讲。您可以阅读更多相关信息here。我还写了一篇关于.NET和XACML的文章,您可以查看here