帮助!:) 我在尝试进行以下工作时遇到了无穷无尽的问题(如果我没有使用正确的术语,请提前道歉):)
我需要一个 .NET Web 应用程序(客户端)与受 SAML 2 策略保护的 Weblogic Web 服务进行通信。我需要使用 .NET 3.5/4 有一些限制,因此我使用 WIF(带有扩展名)来处理配置为生成 SAML2 令牌的 ADFS2。
到目前为止,网站 -> adfs2 -> SAML2 令牌位运行良好 - 我肯定会通过令牌。
附加 (1) - Weblogic 服务必须使用 SAML2 策略来实现发送者担保确认方法,尽管 ADFS 2 默认提供不记名,但我能够在我们通过线路将令牌发送到服务之前操纵 SAML 断言( s)。
Additional(2) - 由于多种原因,无法通过 SSL 访问 web 服务,basicHTTPBinding 是我唯一的选择。
现在的问题..我只是无法与 Weblogic 进行通信,以便在请求中发送令牌(由于请求中没有有效的安全标头,任何记录的尝试都会返回 oracle“常规 Web 服务安全错误” )。首选方法是通过 WCF,使用通道工厂 - 下面的代码是我尝试过的粗略示例 - 声明身份/令牌内容取自 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 方法”,而不必每次都实施表单身份验证(或等效方法)来获取用户凭据。似乎没有任何明显的方法可以将 ADFS 生成的 SecurityToken 与 WSE 结合使用任何一个..
任何人都可以帮忙阐明一下吗?为什么使用提供的令牌的 WCF 通道工厂方法根本不起作用,即在调试时没有有效令牌的迹象,而且 Weblogic 肯定没有接收到有效的 SAML 令牌。
我还研究了使用 CustomMessageEncoder 路由,并以这种方式将 SAML 断言添加到 SOAP 标头中。但据我所知,它真的不应该这么难。WCF 中有什么东西坏了吗?