public WsTrustRequestBodyWriter(WsTrustVersion version, WsTrustSerializer serializer, WsTrustRequest request)
     : base(true)
 {
     _version    = version;
     _request    = request;
     _serializer = serializer;
 }
 public WsTrustEndpoint(Uri uri, WsTrustVersion version, ITimeService timeService = null, IGuidFactory guidFactory = null)
 {
     Uri          = uri;
     Version      = version;
     _timeService = timeService ?? new TimeService();
     _guidFactory = guidFactory ?? new GuidFactory();
 }
Пример #3
0
        private WsTrustEndpoint CreateWsTrustEndpoint(WsTrustVersion version)
        {
            var wsTrustEndpoint = new WsTrustEndpoint(
                version,
                new Uri(EndpointUriString),
                _timeAndGuidServiceHelper.GuidService,
                _timeAndGuidServiceHelper.TimeService);

            return(wsTrustEndpoint);
        }
Пример #4
0
 public WsTrustEndpoint(
     WsTrustVersion version,
     Uri uri,
     IGuidService guidService,
     ITimeService timeService)
 {
     Version      = version;
     Uri          = uri;
     _guidService = guidService;
     _timeService = timeService;
 }
        public WsTrustChannel(WsTrustVersion version, IWsTrustContract contract, WsTrustSerializer serializer)
            : base(contract as IChannel)
        {
            // TODO: add null guards
            _version   = version;
            _constants = GetConstants(version);
            // TODO: get message version from binding
            _messageVersion = MessageVersion.Default;
            _contract       = contract;

            _serializer = serializer;
        }
Пример #6
0
        private string GetWsTrustVersionString(WsTrustVersion version)
        {
            if (version == WsTrustVersion.Trust13)
            {
                return(nameof(WsTrustVersion.Trust13));
            }
            if (version == WsTrustVersion.Trust14)
            {
                return(nameof(WsTrustVersion.Trust14));
            }
            if (version == WsTrustVersion.TrustFeb2005)
            {
                return(nameof(WsTrustVersion.TrustFeb2005));
            }

            return("unknown");
        }
        private static WsTrustConstants GetConstants(WsTrustVersion version)
        {
            if (version == WsTrustVersion.TrustFeb2005)
            {
                return(WsTrustConstants.TrustFeb2005);
            }
            if (version == WsTrustVersion.Trust13)
            {
                return(WsTrustConstants.Trust13);
            }
            if (version == WsTrustVersion.Trust14)
            {
                return(WsTrustConstants.Trust14);
            }

            throw new ArgumentException("Invalid WS-Trust version", nameof(version));
        }
Пример #8
0
        protected virtual WsTrustConstants GetWsTrustConstants(WsTrustVersion version)
        {
            if (version == WsTrustVersion.TrustFeb2005)
            {
                return(WsTrustConstants.TrustFeb2005);
            }
            if (version == WsTrustVersion.Trust13)
            {
                return(WsTrustConstants.Trust13);
            }
            if (version == WsTrustVersion.Trust14)
            {
                return(WsTrustConstants.Trust14);
            }

            throw new NotSupportedException("Trust version not supported.");
        }
        private static void AddPolicy(IDictionary <string, MexPolicy> policies, XElement policy, UserAuthType policyAuthType, bool isWsTrust2005)
        {
            XElement binding = policy.Descendants(XmlNamespace.Sp + "TransportBinding").FirstOrDefault()
                               ?? policy.Descendants(XmlNamespace.Sp2005 + "TransportBinding").FirstOrDefault();

            if (binding != null)
            {
                XAttribute     id      = policy.Attribute(XmlNamespace.Wsu + "Id");
                WsTrustVersion version = WsTrustVersion.WsTrust13;

                if (isWsTrust2005)
                {
                    version = WsTrustVersion.WsTrust2005;
                }

                if (id != null)
                {
                    policies.Add("#" + id.Value, new MexPolicy {
                        Id = id.Value, AuthType = policyAuthType, Version = version
                    });
                }
            }
        }
Пример #10
0
        public static WsTrustResponse CreateFromResponse(Stream responseStream, WsTrustVersion version)
        {
            XDocument responseDocument = ReadDocumentFromResponse(responseStream);

            return(CreateFromResponseDocument(responseDocument, version));
        }
 public WsTrustResponseObjectSerializer(WsTrustVersion version, WsTrustSerializer inner)
 {
     _version = version;
     _inner   = inner;
 }
Пример #12
0
        internal static WsTrustResponse CreateFromResponseDocument(XDocument responseDocument, WsTrustVersion version)
        {
            Dictionary <string, string> tokenResponseDictionary = new Dictionary <string, string>();

            try
            {
                XNamespace t = XmlNamespace.Trust;
                if (version == WsTrustVersion.WsTrust2005)
                {
                    t = XmlNamespace.Trust2005;
                }
                bool parseResponse = true;
                if (version == WsTrustVersion.WsTrust13)
                {
                    XElement requestSecurityTokenResponseCollection =
                        responseDocument.Descendants(t + "RequestSecurityTokenResponseCollection").FirstOrDefault();

                    if (requestSecurityTokenResponseCollection == null)
                    {
                        parseResponse = false;
                    }
                }

                if (parseResponse)
                {
                    IEnumerable <XElement> tokenResponses =
                        responseDocument.Descendants(t + "RequestSecurityTokenResponse");
                    foreach (var tokenResponse in tokenResponses)
                    {
                        XElement tokenTypeElement = tokenResponse.Elements(t + "TokenType").FirstOrDefault();
                        if (tokenTypeElement == null)
                        {
                            continue;
                        }

                        XElement requestedSecurityToken =
                            tokenResponse.Elements(t + "RequestedSecurityToken").FirstOrDefault();
                        if (requestedSecurityToken == null)
                        {
                            continue;
                        }

                        // TODO #123622: We need to disable formatting due to a potential service bug. Remove the ToString argument when problem is fixed.
                        tokenResponseDictionary.Add(tokenTypeElement.Value,
                                                    requestedSecurityToken.FirstNode.ToString(SaveOptions.DisableFormatting));
                    }
                }
            }
            catch (XmlException ex)
            {
                throw new AdalException(AdalError.ParsingWsTrustResponseFailed, ex);
            }

            if (tokenResponseDictionary.Count == 0)
            {
                throw new AdalException(AdalError.ParsingWsTrustResponseFailed);
            }

            string tokenType = tokenResponseDictionary.ContainsKey(Saml1Assertion) ? Saml1Assertion : tokenResponseDictionary.Keys.First();

            WsTrustResponse wsTrustResponse = new WsTrustResponse
            {
                TokenType = tokenType,
                Token     = tokenResponseDictionary[tokenType]
            };

            return(wsTrustResponse);
        }
Пример #13
0
        protected virtual async ValueTask <Message> ProcessCoreAsync(Message requestMessage, string requestAction, string responseAction, WsTrustVersion version)
        {
            var constants = GetWsTrustConstants(version);

            var trace = new WsTrustMessageInformation
            {
                RequestAction  = requestAction,
                ResponseAction = responseAction,
                WsTrustVersion = version,
                TrustNamespace = constants.Namespace
            };

            WsTrustLogMessages.WsTrustMessage(_logger, trace, null);

            var context = await CreateDispatchContextAsync(requestMessage, requestAction, responseAction, constants);

            await ValidateDispatchContextAsync(context);
            await DispatchRequestAsync(context, constants);

            var serializer = _serializerFactory.Create();

            _logger.LogInformation($"Serializing response for '{responseAction}'.");
            var response = Message.CreateMessage(context.MessageVersion, context.ResponseAction, context.ResponseMessage, new WsTrustResponseObjectSerializer(version, serializer));

            return(response);
        }
        internal static WsTrustResponse CreateFromResponseDocument(XDocument responseDocument, WsTrustVersion version)
        {
            Dictionary<string, string> tokenResponseDictionary = new Dictionary<string, string>();

            try
            {
                XNamespace t = XmlNamespace.Trust;
                if (version == WsTrustVersion.WsTrust2005)
                {
                    t = XmlNamespace.Trust2005;
                }
                bool parseResponse = true;
                if (version == WsTrustVersion.WsTrust13)
                {
                    XElement requestSecurityTokenResponseCollection =
                        responseDocument.Descendants(t + "RequestSecurityTokenResponseCollection").FirstOrDefault();

                    if (requestSecurityTokenResponseCollection == null)
                    {
                        parseResponse = false;
                    }
                }

                if (parseResponse)
                {
                    IEnumerable<XElement> tokenResponses =
                        responseDocument.Descendants(t + "RequestSecurityTokenResponse");
                    foreach (var tokenResponse in tokenResponses)
                    {
                        XElement tokenTypeElement = tokenResponse.Elements(t + "TokenType").FirstOrDefault();
                        if (tokenTypeElement == null)
                        {
                            continue;
                        }

                        XElement requestedSecurityToken =
                            tokenResponse.Elements(t + "RequestedSecurityToken").FirstOrDefault();
                        if (requestedSecurityToken == null)
                        {
                            continue;
                        }

                        // TODO #123622: We need to disable formatting due to a potential service bug. Remove the ToString argument when problem is fixed.
                        tokenResponseDictionary.Add(tokenTypeElement.Value,
                            requestedSecurityToken.FirstNode.ToString(SaveOptions.DisableFormatting));
                    }
                }
            }
            catch (XmlException ex)
            {
                PlatformPlugin.Logger.Error(null, ex);
                throw new MsalException(MsalError.ParsingWsTrustResponseFailed, ex);
            }

            if (tokenResponseDictionary.Count == 0)
            {
                throw new MsalException(MsalError.ParsingWsTrustResponseFailed);
            }

            string tokenType = tokenResponseDictionary.ContainsKey(Saml1Assertion) ? Saml1Assertion : tokenResponseDictionary.Keys.First();

            WsTrustResponse wsTrustResponse = new WsTrustResponse
            {
                TokenType = tokenType,
                Token = tokenResponseDictionary[tokenType]
            };

            return wsTrustResponse;
        }
Пример #15
0
        public static WsTrustResponse CreateFromResponse(string response, WsTrustVersion version)
        {
            XDocument responseDocument = XDocument.Parse(response, LoadOptions.PreserveWhitespace); // Could throw XmlException

            return(CreateFromResponseDocument(responseDocument, version));
        }
Пример #16
0
        internal static WsTrustResponse CreateFromResponseDocument(XDocument responseDocument, WsTrustVersion version)
        {
            Dictionary <string, string> tokenResponseDictionary = new Dictionary <string, string>();

            XNamespace t = XmlNamespace.Trust;

            if (version == WsTrustVersion.WsTrust2005)
            {
                t = XmlNamespace.Trust2005;
            }

            bool parseResponse = true;

            if (version == WsTrustVersion.WsTrust13)
            {
                XElement requestSecurityTokenResponseCollection =
                    responseDocument.Descendants(t + "RequestSecurityTokenResponseCollection").FirstOrDefault();

                if (requestSecurityTokenResponseCollection == null)
                {
                    parseResponse = false;
                }
            }

            if (!parseResponse)
            {
                return(null);
            }

            IEnumerable <XElement> tokenResponses =
                responseDocument.Descendants(t + "RequestSecurityTokenResponse");

            foreach (var tokenResponse in tokenResponses)
            {
                XElement tokenTypeElement = tokenResponse.Elements(t + "TokenType").FirstOrDefault();
                if (tokenTypeElement == null)
                {
                    continue;
                }

                XElement requestedSecurityToken =
                    tokenResponse.Elements(t + "RequestedSecurityToken").FirstOrDefault();
                if (requestedSecurityToken == null)
                {
                    continue;
                }

                var token = new System.Text.StringBuilder();
                foreach (var node in requestedSecurityToken.Nodes())
                {
                    // Since we moved from XDocument.Load(..., LoadOptions.None) to Load(..., LoadOptions.PreserveWhitespace),
                    // requestedSecurityToken can contain multiple nodes, and the first node is possibly just whitespaces e.g. "\n   ",
                    // so we concatenate all the sub-nodes to include everything
                    token.Append(node.ToString(SaveOptions.DisableFormatting));
                }

                tokenResponseDictionary.Add(tokenTypeElement.Value, token.ToString());
            }

            if (tokenResponseDictionary.Count == 0)
            {
                return(null);
            }

            string tokenType = tokenResponseDictionary.ContainsKey(Saml1Assertion)
                ? Saml1Assertion
                : tokenResponseDictionary.Keys.First();

            WsTrustResponse wsTrustResponse = new WsTrustResponse
            {
                TokenType = tokenType,
                Token     = tokenResponseDictionary[tokenType]
            };

            return(wsTrustResponse);
        }
 public static WsTrustResponse CreateFromResponse(Stream responseStream, WsTrustVersion version)
 {
     XDocument responseDocument = ReadDocumentFromResponse(responseStream);
     return CreateFromResponseDocument(responseDocument, version);
 }