/// <summary>
        /// Build context based on ServiceContextAccessor, security token and header dictionary.
        /// </summary>
        /// <typeparam name="T">Context type</typeparam>
        /// <param name="securityTokenAccessor">Security token accessor</param>
        /// <param name="headers">Header dictionary</param>
        /// <param name="serviceContextAccessor"> Service Context Accessor instance </param>
        /// <returns>Context</returns>
        public static DefaultServiceContext BuildContext(ISecurityTokenAccessor securityTokenAccessor,
                                                         IDictionary <string, IEnumerable <string> > headers
                                                         )
        {
            var contextCollection = new Dictionary <string, IEnumerable <string> >();

            foreach (var kv in securityTokenAccessor.ContextItems)
            {
                contextCollection.Add(kv.Key, new[] { kv.Value.ToString() });
            }

            if (headers != null)
            {
                foreach (var h in headers)
                {
                    if (!contextCollection.ContainsKey(h.Key))
                    {
                        contextCollection.Add(h.Key, h.Value);
                    }
                }
            }

            return(contextCollection.Keys.Count > 0
                ? Deserialize(contextCollection)
                : new DefaultServiceContext());
        }
 public TokenAuthenticationMiddleware(RequestDelegate next, ISecurityTokenAccessor securityTokenAccessor)
 {
     _next = next;
     this._securityTokenAccessor = securityTokenAccessor;
 }