我正在创建一个分布式应用程序,该应用程序将使用ASP.NET Web API来支持单页面Web应用程序(SPA)和其他潜在的本地移动应用程序平台。我目前的体系结构使用Thinktecture Identity Server作为STS,它将为我的客户端提供授权令牌以用于访问WebAPI。在后端,我将拥有持久性和业务逻辑,这些将由我的WebAPI的独立应用程序域中的WCF服务公开。 WebAPI将调用服务层来访问数据并对域执行操作。分布式应用程序中的ASP.NET WebAPI客户端授权
我的问题是关于授权。我将使用基于声明的授权,并且可以从我的WCF公开的业务层中增加有关用户的域数据的声明列表。但我应该在哪里进行授权?在.NET 4.5中,ASP.NET现在有一个可扩展的模型,使我能够将授权逻辑从我的控制器中分离出来,并使用ClaimsAuthorizationManager作为单独的授权模块。此外,Thinktecture.IdentityModel在我的WebAPI应用程序中提供所有的管道工具来做到这一点非常出色。但是,我不禁认为授权逻辑应该位于我的业务层中,位于WCF服务之后,并且面向客户端的WebAPI不应负责执行此任务。如果我需要其他面向客户端的托管应用程序来使用我的基于WCF的业务层,那么他们还需要实现安全代码。不利的一面是,这意味着未经授权的请求会在被拒绝之前进入应用程序。
问题:我应该在ASP.NET中使用基于声明的授权功能,还是应该在WCF服务背后的业务层中包装授权?
如果您只能通过您的asp.net网站访问您的服务,那么获得您的asp.net句柄授权将更容易,以避免服务请求。如果您将通过其他消费者访问您的服务,我相信随着您的服务处理授权,它会更加稳固。 – Esteban