void AddCompatibleFederationEndpoints(ServiceEndpointCollection serviceEndpoints, IssuedSecurityTokenParameters parameters) { // check if an explicit issuer address has been specified. If so,add the endpoint corresponding to that address only. If not add all acceptable endpoints. bool isIssuerSpecified = (parameters.IssuerAddress != null && !parameters.IssuerAddress.IsAnonymous); foreach (ServiceEndpoint endpoint in serviceEndpoints) { TrustDriver trustDriver; if (!TryGetTrustDriver(endpoint, out trustDriver)) { // if endpoint does not have trustDriver, assume // parent trustDriver. trustDriver = this.trustDriver; } bool isFederationContract = false; ContractDescription contract = endpoint.Contract; for (int j = 0; j < contract.Operations.Count; ++j) { OperationDescription operation = contract.Operations[j]; bool hasIncomingRst = false; bool hasOutgoingRstr = false; for (int k = 0; k < operation.Messages.Count; ++k) { MessageDescription message = operation.Messages[k]; if (message.Action == trustDriver.RequestSecurityTokenAction.Value && message.Direction == MessageDirection.Input) { hasIncomingRst = true; } else if ((((trustDriver.StandardsManager.TrustVersion == TrustVersion.WSTrustFeb2005) && (message.Action == trustDriver.RequestSecurityTokenResponseAction.Value)) || ((trustDriver.StandardsManager.TrustVersion == TrustVersion.WSTrust13) && (message.Action == trustDriver.RequestSecurityTokenResponseFinalAction.Value))) && message.Direction == MessageDirection.Output) { hasOutgoingRstr = true; } } if (hasIncomingRst && hasOutgoingRstr) { isFederationContract = true; break; } } if (isFederationContract) { // skip if it is not an acceptable endpoint if (isIssuerSpecified && !parameters.IssuerAddress.Uri.Equals(endpoint.Address.Uri)) { continue; } if (parameters.IssuerBinding == null) { parameters.IssuerAddress = endpoint.Address; parameters.IssuerBinding = endpoint.Binding; } else { IssuedSecurityTokenParameters.AlternativeIssuerEndpoint endpointInfo = new IssuedSecurityTokenParameters.AlternativeIssuerEndpoint(); endpointInfo.IssuerAddress = endpoint.Address; endpointInfo.IssuerBinding = endpoint.Binding; parameters.AlternativeIssuerEndpoints.Add(endpointInfo); } } } }
private void AddCompatibleFederationEndpoints(ServiceEndpointCollection serviceEndpoints, IssuedSecurityTokenParameters parameters) { bool flag = (parameters.IssuerAddress != null) && !parameters.IssuerAddress.IsAnonymous; foreach (ServiceEndpoint endpoint in serviceEndpoints) { TrustDriver trustDriver; if (!this.TryGetTrustDriver(endpoint, out trustDriver)) { trustDriver = this.trustDriver; } bool flag2 = false; ContractDescription contract = endpoint.Contract; for (int i = 0; i < contract.Operations.Count; i++) { OperationDescription description2 = contract.Operations[i]; bool flag3 = false; bool flag4 = false; for (int j = 0; j < description2.Messages.Count; j++) { MessageDescription description3 = description2.Messages[j]; if ((description3.Action == trustDriver.RequestSecurityTokenAction.Value) && (description3.Direction == MessageDirection.Input)) { flag3 = true; } else if ((((trustDriver.StandardsManager.TrustVersion == TrustVersion.WSTrustFeb2005) && (description3.Action == trustDriver.RequestSecurityTokenResponseAction.Value)) || ((trustDriver.StandardsManager.TrustVersion == TrustVersion.WSTrust13) && (description3.Action == trustDriver.RequestSecurityTokenResponseFinalAction.Value))) && (description3.Direction == MessageDirection.Output)) { flag4 = true; } } if (flag3 && flag4) { flag2 = true; break; } } if (flag2 && (!flag || parameters.IssuerAddress.Uri.Equals(endpoint.Address.Uri))) { if (parameters.IssuerBinding == null) { parameters.IssuerAddress = endpoint.Address; parameters.IssuerBinding = endpoint.Binding; } else { IssuedSecurityTokenParameters.AlternativeIssuerEndpoint item = new IssuedSecurityTokenParameters.AlternativeIssuerEndpoint { IssuerAddress = endpoint.Address, IssuerBinding = endpoint.Binding }; parameters.AlternativeIssuerEndpoints.Add(item); } } } }