public void WhenIValidateTheSecureArmorToken()
        {
            var standardArmorTokenValidator = new SecureArmorTokenValidator(secureArmorToken, encryptionKey, hashingKey, "*****@*****.**", 300000);

            standardArmorTokenValidator.Execute();

            armorTokenValidationStepResult = standardArmorTokenValidator.ArmorTokenValidationStepResult;
        }
        protected override bool IsAuthorized(HttpActionContext actionContext)
        {
            #region Read logged-in user claims

            var principal = (ClaimsIdentity)Thread.CurrentPrincipal.Identity;
            var userId    = principal.Claims.Single(c => c.Type.Equals("UserId")).Value;
            var platform  = principal.Claims.Single(c => c.Type.Equals("Platform")).Value;

            #endregion

            #region Ensure existence of ArmorToken in HTTP header

            var armorHeaderParser = new ArmorHeaderParser(actionContext.Request.Headers);
            armorHeaderParser.Execute();

            if (!armorHeaderParser.ArmorTokenHeader.IsValid)
            {
                return(false);
            }

            #endregion

            #region Validate ArmorToken

            var encryptionKey = Convert.FromBase64String("0nA6gWIoNXeeFjJFo1qi1ZlL7NI/4a6YbL8RnqMTC1A=");
            var hashingKey    = Convert.FromBase64String("0nA6gWIoNXeeFjJFo1qi1ZlL7NI/4a6YbL8RnqMTC1A=");

            var secureArmorTokenValidator = new SecureArmorTokenValidator(armorHeaderParser.ArmorTokenHeader.ArmorToken, encryptionKey, hashingKey, userId, 10000000000);
            secureArmorTokenValidator.Execute();

            if (!secureArmorTokenValidator.ArmorTokenValidationStepResult.IsValid)
            {
                return(false);
            }

            #endregion

            #region Refresh ArmorToken and re-issue

            var nonceGenerator = new NonceGenerator();
            nonceGenerator.Execute();

            var armorToken = new ArmorToken(userId, platform, nonceGenerator.Nonce, new[] { new Claim("Another", "Claim") });

            var armorTokenConstructor           = new ArmorTokenConstructor();
            var standardSecureArmorTokenBuilder = new StandardSecureArmorTokenBuilder(armorToken, encryptionKey, hashingKey);
            var generateSecureArmorToken        = new GenerateSecureArmorToken(armorTokenConstructor, standardSecureArmorTokenBuilder);

            generateSecureArmorToken.Execute();

            #endregion

            HttpContext.Current.Response.AppendHeader("ARMOR", generateSecureArmorToken.SecureArmorToken);
            return(true);
        }
        public bool Authorize()
        {
            #region Read logged-in user claims

            var identityReader = identityReaderFactory.Create();
            IEnumerable <Claim> identity;

            var isAuthenticated = identityReader.TryRead(out identity);
            if (!isAuthenticated)
            {
                return(false);
            }

            var claims = identity.ToList();
            var userId = claims.Single(c => c.Type.Equals("UserId")).Value;

            #endregion

            #region Ensure existence of ArmorToken in HTTP header

            var armorHeaderParser = httpRequestArmorHeaderParserFactory.Create();
            ArmorTokenHeader armorTokenHeader;

            var hasArmorTokenHeader =
                armorHeaderParser.TryParse(out armorTokenHeader);
            if (!hasArmorTokenHeader)
            {
                return(false);
            }

            #endregion

            #region Validate ArmorToken

            var encryptionKey = ArmorSettings.EncryptionKey;
            var hashingKey    = ArmorSettings.HashingKey;
            var armorTimeOut  = ArmorSettings.Timeout;

            var secureArmorTokenValidator =
                new SecureArmorTokenValidator(armorTokenHeader.ArmorToken,
                                              encryptionKey, hashingKey, userId, armorTimeOut);
            secureArmorTokenValidator.Execute();

            return
                (secureArmorTokenValidator.ArmorTokenValidationStepResult.IsValid);

            #endregion
        }
        public bool Authorize() {
            #region Read logged-in user claims

            var identityReader = identityReaderFactory.Create();
            IEnumerable<Claim> identity;

            var isAuthenticated = identityReader.TryRead(out identity);
            if (!isAuthenticated) return false;

            var claims = identity.ToList();
            var userId = claims.Single(c => c.Type.Equals("UserId")).Value;

            #endregion

            #region Ensure existence of ArmorToken in HTTP header

            var armorHeaderParser = httpRequestArmorHeaderParserFactory.Create();
            ArmorTokenHeader armorTokenHeader;

            var hasArmorTokenHeader =
                armorHeaderParser.TryParse(out armorTokenHeader);
            if (!hasArmorTokenHeader) return false;

            #endregion

            #region Validate ArmorToken

            var encryptionKey =
                Convert.FromBase64String(
                    ConfigurationManager.AppSettings["ArmorEncryptionKey"]);
            var hashingKey =
                Convert.FromBase64String(
                    ConfigurationManager.AppSettings["ArmorHashKey"]);
            var armorTimeOut =
                Convert.ToInt64(ConfigurationManager.AppSettings["ArmorTimeout"]);

            var secureArmorTokenValidator =
                new SecureArmorTokenValidator(armorTokenHeader.ArmorToken,
                    encryptionKey, hashingKey, userId, armorTimeOut);
            secureArmorTokenValidator.Execute();

            return
                secureArmorTokenValidator.ArmorTokenValidationStepResult.IsValid;

            #endregion
        }