加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – WCF,WebAPI和OWIN IIS集成管道.根据路线跳过OWIN

发布时间:2020-12-16 03:23:40 所属栏目:asp.Net 来源:网络整理
导读:情况 我有一个使用WCF后端的Silverlight应用程序.展望未来,我们已经转向使用WebAPI的JS客户端. 我想从Silverlight客户端使用几个WebAPI控制器,因此将它们加载到承载WCF服务的ASP.Net应用程序中. 从“所有服务都可用”的角度来看,这样可以正常工作,但是WCF调
情况

我有一个使用WCF后端的Silverlight应用程序.展望未来,我们已经转向使用WebAPI的JS客户端.

我想从Silverlight客户端使用几个WebAPI控制器,因此将它们加载到承载WCF服务的ASP.Net应用程序中.

从“所有服务都可用”的角度来看,这样可以正常工作,但是WCF调用会多次调用授权;来自OWIN并通过WCF ServiceAuthorizationManager

在WCF端,我的ServiceAuthorizationManager实现验证AuthHeader中的令牌,然后转换该令牌(在System.IdentityModel声明转换意义上).在WebAPI方面,我使用的是Thinktecture.IdentityModel,它提供了OWIN中间件来进行令牌验证和声明转换.

问题是,为所有请求(包括WCF请求)调用OWIN中间件.所以在WCF请求的情况下,我得到两次验证和转换.我不能只删除ServiceAuthorizationManager并让中间件处理它,因为WCF不知道OWIN,ServiceAuthorizationManager的最后一步是设置操作上下文主体(与ClaimsPrincipal.Current不同).

在WCF和WebAPI并排坐着之前,有没有人遇到这样的问题?最好的方法是在WCF调用的早期以某种方式退出OWIN管道,如果是这样,如何通过OMC完成?或者我可以以某种方式使用IAppBuilder.Map方法仅注册API路由的令牌验证和转换组件(在这种情况下,任何启动/ api)?

解决方法

我已经设法通过 Branched Pipeline让它工作.

app.MapWhen(c => c.Request.Path.Value.Contains("/api"),subApp =>
                    {
                        subApp.UseJsonWebToken(
                            issuer: clientDetails.Issuer,audience: clientDetails.Audience,signingKey: clientDetails.SigningKey);

                        subApp.UseClaimsTransformation(transformer.Transform);

                        var webApiConfig = WebApiConfig.Configure();
                        webApiConfig.DependencyResolver = StructureMapConfig.HttpDependencyResolver();
                        subApp.UseWebApi(webApiConfig);
                    });

我唯一想知道的是为什么IAppBuilder.Map如上所述,但是当我使用IAppBuilder.Map它似乎不起作用…

app.Map("/api",subApp => ...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读