1

我尝试通过使用 SAML 令牌对自己进行身份验证来调用 SOAP 服务。首先,我通过调用 ADFS 获得目标的 SAML 令牌:

var stsEndpoint = "https://ADFS.EXAMPLE/adfs/services/trust/13/kerberosmixed";
var reliantPartyUri = "http://reliant-party.com";

var binding = new CustomBinding();
var ssbe = SecurityBindingElement.CreateKerberosOverTransportBindingElement();
ssbe.DefaultAlgorithmSuite = SecurityAlgorithmSuite.Basic128;
ssbe.MessageSecurityVersion = MessageSecurityVersion.WSSecurity10WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10;            
binding.Elements.Add(ssbe);

binding.Elements.Add(new TextMessageEncodingBindingElement());
binding.Elements.Add(new HttpsTransportBindingElement());

var factory = new WSTrustChannelFactory(binding, new EndpointAddress(stsEndpoint));
factory.TrustVersion = TrustVersion.WSTrust13;

var rst = new RequestSecurityToken
{
    RequestType = RequestTypes.Issue,
    AppliesTo = new EndpointReference(reliantPartyUri)
};

var channel = factory.CreateChannel();
var token = channel.Issue(rst);

现在我想使用 SAML 令牌来调用安全的 SOAP Web 服务。如何添加令牌?我尝试了以下但没有成功(soap 请求不包含任何令牌):

//Service was created by an imported WSDL File - Methods and Types renamed for StackOverflow
var request = new Service.WsdlCreatedRequest();
[...]

var wsdlClient = new Service.WsdlCreatedService("HTTPS_Port");            
var wsdlChannel = wsdlClient.ChannelFactory.CreateChannelWithIssuedToken(token);      
wsdlChannel.WsdlCreatedMethod(request);

知道如何在请求中使用令牌吗?

4

0 回答 0