private ValidatedJWToken(JwtSecurityToken t)
        {
            RawTokenData = t.RawData;
            var claims = t.Claims.ToDictionary(x => x.Type);

            if (!claims.ContainsKey(JWToken.ClientIdKey) || !claims.ContainsKey(JWToken.TenancyIdKey) ||
                !claims.ContainsKey(JWToken.UserIdKey) || !claims.ContainsKey(JWToken.GrantsDocumentKey))
            {
                throw new Exception("Missing keys in token");
            }

            var securityActionStrings = JsonConvert.DeserializeObject <IEnumerable <string> >(claims[JWToken.GrantsDocumentKey].Value);
            var securityActionEnums   = new HashSet <SecurityAction>();

            foreach (var s in securityActionStrings)
            {
                SecurityAction action;
                if (Enum.TryParse(s, true, out action))
                {
                    securityActionEnums.Add(action);
                }
            }

            ACC = new AuthenticatedClientClaims {
                Client          = new ClientInstanceIndicator(Guid.Parse(claims[JWToken.ClientIdKey].Value)),
                Tenancy         = new TenancyIndicator(Guid.Parse(claims[JWToken.TenancyIdKey].Value)),
                User            = new StaffMemberIndicator(Guid.Parse(claims[JWToken.UserIdKey].Value)),
                SecurityActions = securityActionEnums,
            };
        }
        public ValidatedJWTokenTestForgery(StaffMemberIndicator user, IEnumerable <SecurityAction> securityActions,
                                           TenancyIndicator tenancy, ClientInstanceIndicator clientInstance, DateTime requestTime, bool hasExpiration)
        {
            var sskf = new StubSecurityKeyFactory("SecretKeySecretKeySecretKeySecretKeySecretKeySecretKeySecretKeySecretKey");

            ACC = new AuthenticatedClientClaims {
                Tenancy = tenancy,
                User    = user,
                Client  = clientInstance,
            };
            ACC.SecurityActions.UnionWith(securityActions);

            RawTokenData = new JWToken(clientInstance, user, securityActions, tenancy, requestTime, hasExpiration,
                                       sskf.SigningCredentials).SignedToken;
        }