Sim*_*Fox 5 asp.net wcf authorization asp.net-web-api owin
情况
我有一个使用WCF后端的Silverlight应用程序.展望未来,我们已经转向使用WebAPI的JS客户端.
我想从Silverlight客户端使用几个WebAPI控制器,因此将它们加载到承载WCF服务的ASP.Net应用程序中.
从"所有服务都可用"的角度来看,这样可以正常工作,但是WCF调用会多次调用授权; 从OWIN到WCFServiceAuthorizationManager
在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);
});
Run Code Online (Sandbox Code Playgroud)
我唯一想知道的是为什么IAppBuilder.MapWhen
上面的方法有效,但当我使用IAppBuilder.Map
它时似乎不起作用......
app.Map("/api",
subApp => ...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1954 次 |
最近记录: |