2

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

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

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

4

1 回答 1

1

如果可能,您应该始终尝试使用您使用的框架为您提供的授权工具。在微软的案例中,它是基于声明的授权。好处是您将授权逻辑隔离在其自身的一层中,而不是在您的业务逻辑中。

基于声明的授权是众多授权方法之一。另一个是使用 XACML。我最近为开发人员(尽管是 Java 开发人员)做了一个关于 XACML 的演讲。你可以在这里阅读更多关于它的信息。我还写了一篇关于 .NET 和 XACML 的文章,您可以在此处查看

于 2013-10-01T16:42:39.107 回答