コード例 #1
0
        public async Task <SamlInboundMessage> Decode(IDictionary <string, string> request)
        {
            var result = new SamlInboundMessage(new Uri(Kernel.Federation.MetaData.Configuration.Bindings.Http_Post), null);

            foreach (var el in request)
            {
                var decoded = await this.DecodeElement(el);

                result.Elements.Add(decoded.Key, decoded.Value);
            }
            return(result);
        }
コード例 #2
0
        public async Task <SamlInboundMessage> Decode(Uri request)
        {
            var source = request.Query.TrimStart('?').Split('&')
                         .Select(x => x.Split('='))
                         .ToDictionary(k => k[0], v => v[1]);

            var result = new SamlInboundMessage(new Uri(Kernel.Federation.MetaData.Configuration.Bindings.Http_Redirect), request);

            foreach (var el in source)
            {
                var decoded = await this.DecodeElement(el);

                result.Elements.Add(decoded.Key, decoded.Value);
            }
            return(result);
        }
コード例 #3
0
        private async Task <object> ResolveRelayState(SamlInboundMessage message, bool spInitiated)
        {
            if (!message.HasRelaySate)
            {
                return(null);
            }

            var    relayStateRaw = message.RelayState;
            object relayState    = relayStateRaw;

            if (spInitiated && relayStateRaw != null)
            {
                relayState = await this._relayStateHandler.Decode(relayStateRaw.ToString());
            }
            message.Elements[HttpRedirectBindingConstants.RelayState] = relayState;
            return(relayState);
        }
コード例 #4
0
        internal static bool VerifyRedirectSignature(Uri request, X509Certificate2 certificate, SamlInboundMessage message, ICertificateManager certificateManager)
        {
            var queryString = request.Query.TrimStart('?');
            var i           = queryString.IndexOf("Signature");

            if (i == -1)
            {
                throw new InvalidOperationException("No signature found.");
            }
            var data = queryString.Substring(0, i - 1);
            var sgn  = message.Signature.Signature;

            var validated = certificateManager.VerifySignatureFromBase64(data, sgn, certificate);

            return(validated);
        }