【发布时间】:2015-12-18 16:11:35
【问题描述】:
我有一个充当 WCF 客户端的 ASP.NET MVC/WebApi 应用程序。我的 WCF 服务正在通过 ClaimsPrincipalPermission 进行授权,如果当前用户和数据的组合不匹配(例如,用户试图访问其他用户的数据),则另外抛出 SecurityException。
我在过滤器中将其捕获为 SecurityAccessDeniedException 并返回状态代码 403。
但这仅适用于涉及单跳的通信。如果服务本身与另一个服务通信,那么SecurityAccessDeniedException 在到达 Web 应用程序之前会变成FaultException。
示例流程:
Web client --> Service A [SecurityException] --> [SecurityAccessDeniedException] Web
Web client --> Service A --> Service B [SecurityException]
--> [SecurityAccessDeniedException] Service A [FaultException] --> [FaultException] Web
我尝试实现一个处理SecurityAccessDeniedException 的IErrorHandler,但我不能只在那里抛出一个SecurityException。
我有哪些选择可以将SecurityException 传播到 Web 客户端?
或者:如何在我的错误处理程序中构造一条消息,然后客户端将其正确解释为SecurityAccessDeniedException?
【问题讨论】:
标签: c# wcf exception authorization