/// <summary>
        /// Converts a transferred identity into a Claims-Identity
        /// </summary>
        /// <param name="transferred">the identity that came transferred from a remote client</param>
        /// <returns>an identity that can be used for further processing</returns>
        public static IIdentity ToIdentity(this TransferIdentity transferred)
        {
            if (transferred.IsAuthenticated)
            {
                ClaimsIdentity retVal = new ClaimsIdentity(from t in transferred.Claims select new Claim(t.Type, t.Value, t.ValueType, t.Issuer, t.OriginalIssuer),
                                                           transferred.AuthenticationType,
                                                           transferred.NameType,
                                                           transferred.RoleType);
                return(retVal);
            }

            return(null);
        }
        public static IIdentity ToIdentity(this TransferIdentity transferred, ICustomServerSecurity serverSecurity)
        {
            var retVal = transferred.ToIdentity();

            if (retVal != null && serverSecurity != null && retVal is ClaimsIdentity ci)
            {
                var props = serverSecurity.GetCustomProperties(retVal);
                foreach (var item in props)
                {
                    ci.AddClaim(new Claim(item.Key, item.Value));
                }
            }

            return(retVal);
        }
        public static TransferIdentity ForTransfer(this ClaimsIdentity identity, string transferNameClaim = null, string transferRoleClaim = null)
        {
            var retVal = new TransferIdentity();

            retVal.NameType           = transferNameClaim ?? identity.NameClaimType;
            retVal.RoleType           = transferRoleClaim ?? identity.RoleClaimType;
            retVal.AuthenticationType = identity.AuthenticationType;
            retVal.IsAuthenticated    = identity.IsAuthenticated;
            retVal.Label = identity.Label;
            retVal.Claims.AddRange(from t in identity.Claims
                                   select new TransferClaim
            {
                Value          = t.Value,
                Issuer         = t.Issuer,
                Properties     = new Dictionary <string, string>(t.Properties),
                OriginalIssuer = t.OriginalIssuer,
                Type           = t.Type,
                ValueType      = t.ValueType
            });
            return(retVal);
        }