2013-03-21 59 views
1

帮助! :)我没有试图让下面的工作问题结束(提前道歉,如果我不使用精确的正确的术语):)使用带WCF通道和Weblogic服务的SAML2令牌

我需要一个.NET Web应用程序(客户端)进行通信Weblogic Web服务使用SAML 2策略进行保护。有一些限制,我需要使用.NET 3.5/4,因此我使用WIF(带扩展)与配置为生成SAML2令牌的ADFS2协同工作。

网站 - > adfs2 - > SAML2标志位是工作的罚款,到目前为止 - 我肯定通过获得令牌。

附加(1) - Weblogic服务必须使用SAML2策略来实现发件人确认方法,尽管默认情况下ADFS 2提供了承载,但在我们通过线路发送令牌之前,我能够操纵SAML断言到服务。

其他(2) - 的原因很多,web服务不通过SSL达到和basicHttpBinding的是我唯一的选择。

现在的问题 ..我只是不能使用Weblogic以这样的方式为在发送请求令牌通信(任何登录尝试返回一个神谕“一般的Web服务安全性的错误”,因为那里是没有请求中的有效安全头)。首选的方法是通过WCF,使用通道工厂 - 下面的代码是什么,我已经尝试了粗略的例子 - claimsidentity /令牌的东西是从与WIF扩展的东西来了代码示例采取:

IClaimsIdentity identity = Thread.CurrentPrincipal.Identity as IClaimsIdentity; 
Saml2SecurityToken token = identity.BootstrapToken as Saml2SecurityToken; 

BasicHttpBinding binding = new BasicHttpBinding(); 
binding.Security.Mode = BasicHttpSecurityMode.None; 
binding.Security.Transport.ClientCredentialType = HttpClientCredntialType.None; 

EndpointAddress address = new EndpointAddress("http://someaddress"); 

ChannelFactory<weblogicService.MyService> factory = new ChannelFactory<weblogicService.MyService>(binding,address); 

factory.ConfigureChannelFactory<weblogicService.MyService>(); 
factory.Credentials.SupportInteractive = false; 
weblogicService.MyService proxy = factory.CreateChannelWithIssuedToken<weblogicService.MyService>(token) 
proxy.DoSomething(); 

在以下职位的答案(和其他地方我已经能找到): WCF and WebLogic SAML interop

..是我在做什么 - 但能否通过实现客户观看使用Wireshark或者交通MessageInspector并在“BeforeSendRequest”中查看请求,我看不到任何标记的符号(并且请求被拒绝作为结果编辑)。

另外,如果我操纵令牌包括寄件人先天不足,或只是离开它,因为它本来也没关系。

附加(3):如果我不使用ADFS2/SAML/WIF/WCF等,我已经能够成功地与Weblogic服务进行通信,而是通过更基本的WSE2.0/3.0 Web引用的方法(即创建SoapRequest,用户名标记等)

这问题,就是在没有用户交互提供有效的用户名和密码。换句话说,保持“SSO方法”,而不必实现Forms Authentication(或等效)以每次获取用户证书。似乎没有任何明显的方式使用由ADFS和WSE生成的SecurityToken要么..

任何人都可以帮助摆脱一些光?为什么WCF通道工厂使用提供的令牌不能正常工作,即在调试时没有有效令牌的标志,并且Weblogic肯定没有收到有效的SAML令牌。

我也看着去CustomMessageEncoder路线,并将SAML Assertion添加到SOAP标头中,但是从我已经能够发现的情况来看,它确实不应该这么困难。 WCF中的东西坏了吗?

+0

Hello Mac。关于您的第三点(附加(3)),也许我可以建议您采取以下解决方法:如果您可以在.NET客户端中获得用户凭据,请通过“Authorization:Basic encodedCredentials”标题将它们包含在HTTP请求中。我知道这不是最好的方法,但... – Gaucho 2013-03-22 08:19:11

+0

嗨,谢谢你的回复。额外的(3)实际上是最后的手段,因为需要避免让用户在登录网站时输入他们的凭证。真正令人头疼的是,SAML2/Channelfactory方法*可能*工作,但它不是:(可能还有其他基本的HTTP绑定设置或我可以使用的自定义行为,但我不确定它们会是什么样的。 – 2013-03-22 09:08:40

+0

好吧,它看起来是导致我的问题的因素的组合,不仅仅是目标Web服务的配置所施加的限制,目前无法改变 - 返回到绘图板;) – 2013-03-27 13:42:10

回答

0

终点结合限制(basicHTTP)不支持SAML2 AFAIK,也ADFS2。0似乎只提供承载令牌并在事实之后修改令牌也不是启动器(WIF中的建议覆盖操作似乎不像预期的那样工作),并且最终因为Web服务不在https后面,没有安全模式(这是唯一可以使用的模式)意味着无论如何都不会发送令牌。啊,回到绘图板!