internal static Uri ExtractWsTrustAddressFromMex(XDocument mexDocument, UserAuthType userAuthType) { Uri url; try { Dictionary <string, MexPolicy> policies = ReadPolicies(mexDocument); Dictionary <string, MexPolicy> bindings = ReadPolicyBindings(mexDocument, policies); SetPolicyEndpointAddresses(mexDocument, bindings); Random random = new Random(); MexPolicy policy = policies.Values.Where(p => p.Url != null && p.AuthType == userAuthType).OrderBy(p => random.Next()).FirstOrDefault(); if (policy != null) { url = policy.Url; } else if (userAuthType == UserAuthType.IntegratedAuth) { throw new AdalException(AdalError.IntegratedAuthFailed, new AdalException(AdalError.WsTrustEndpointNotFoundInMetadataDocument)); } else { throw new AdalException(AdalError.WsTrustEndpointNotFoundInMetadataDocument); } } catch (XmlException ex) { throw new AdalException(AdalError.ParsingWsMetadataExchangeFailed, ex); } return(url); }
internal static WsTrustAddress ExtractWsTrustAddressFromMex(XDocument mexDocument, UserAuthType userAuthType, CallState callState) { WsTrustAddress address = null; MexPolicy policy = null; try { Dictionary <string, MexPolicy> policies = ReadPolicies(mexDocument); Dictionary <string, MexPolicy> bindings = ReadPolicyBindings(mexDocument, policies); SetPolicyEndpointAddresses(mexDocument, bindings); Random random = new Random(); //try ws-trust 1.3 first policy = policies.Values.Where( p => p.Url != null && p.AuthType == userAuthType && p.Version == WsTrustVersion.WsTrust13) .OrderBy(p => random.Next()) .FirstOrDefault() ?? policies.Values.Where(p => p.Url != null && p.AuthType == userAuthType) .OrderBy(p => random.Next()) .FirstOrDefault(); if (policy != null) { address = new WsTrustAddress(); address.Uri = policy.Url; address.Version = policy.Version; } else if (userAuthType == UserAuthType.IntegratedAuth) { throw new AdalException(AdalError.IntegratedAuthFailed, new AdalException(AdalError.WsTrustEndpointNotFoundInMetadataDocument)); } else { throw new AdalException(AdalError.WsTrustEndpointNotFoundInMetadataDocument); } } catch (XmlException ex) { throw new AdalException(AdalError.ParsingWsMetadataExchangeFailed, ex); } return(address); }