【发布时间】:2014-08-31 04:52:48
【问题描述】:
情况
我有一个使用 WCF 后端的 Silverlight 应用程序。展望未来,我们已经转向使用 WebAPI 的 JS 客户端。
我想从 Silverlight 客户端使用几个 WebAPI 控制器,因此将它们加载到托管 WCF 服务的 ASP.Net 应用程序中。
从“所有服务都可用”的角度来看,这可以正常工作,但是 WCF 调用会多次调用授权;从 OWIN 和通过 WCF ServiceAuthorizationManager
在 WCF 方面,我的 ServiceAuthorizationManager 实现验证 AuthHeader 中的令牌,然后转换该令牌(在 System.IdentityModel 声明转换意义上)。在 WebAPI 方面,我使用了Thinktecture.IdentityModel,它提供了 OWIN 中间件来进行令牌验证和声明转换。
问题是,OWIN 中间件会为所有请求(包括 WCF 请求)调用。因此,在 WCF 请求的情况下,我会执行两次验证和转换。我不能只删除 ServiceAuthorizationManager 并让中间件处理它,因为 WCF 对 OWIN 一无所知,而 ServiceAuthorizationManager 的最后一步是设置操作上下文主体(与 ClaimsPrincipal.Current 不同)。
问题
WCF 和 WebAPI 并排使用之前是否有人遇到过这样的问题?最好的方法是在 WCF 调用的早期以某种方式退出 OWIN 管道,如果是这样,如何通过 OMC 完成?或者我可以以某种方式使用 IAppBuilder.Map 方法仅注册 API 路由的令牌验证和转换组件(在这种情况下任何以 /api 开头的)?
【问题讨论】:
标签: asp.net wcf asp.net-web-api authorization owin