Exemple #1
0
        public static string UsingWebEncoders(string input)
        {
            byte[] inputBytes  = null;
            char[] outputChars = null;

            try
            {
                var minimumLength = Encoding.UTF8.GetByteCount(input);
                inputBytes = ArrayPool <byte> .Shared.Rent(minimumLength);

                int inputBytesCount = Encoding.UTF8.GetBytes(input, 0, input.Length, inputBytes, 0);

                var outputSize = WebEncoders.GetArraySizeRequiredToEncode(inputBytesCount);
                outputChars = ArrayPool <char> .Shared.Rent(outputSize);

                var charsSize = WebEncoders.Base64UrlEncode(inputBytes, 0, outputChars, 0, inputBytesCount);
                return(new string(outputChars, 0, charsSize));
            }
            finally
            {
                if (inputBytes != null)
                {
                    ArrayPool <byte> .Shared.Return(inputBytes);
                }
                if (outputChars != null)
                {
                    ArrayPool <char> .Shared.Return(outputChars);
                }
            }
        }
Exemple #2
0
        public string Serialize(AntiforgeryToken token)
        {
            if (token == null)
            {
                throw new ArgumentNullException(nameof(token));
            }

            var serializationContext = _pool.Get();

            try
            {
                var writer = serializationContext.Writer;
                writer.Write(TokenVersion);
                writer.Write(token.SecurityToken !.GetData());
                writer.Write(token.IsCookieToken);

                if (!token.IsCookieToken)
                {
                    if (token.ClaimUid != null)
                    {
                        writer.Write(true /* isClaimsBased */);
                        writer.Write(token.ClaimUid.GetData());
                    }
                    else
                    {
                        writer.Write(false /* isClaimsBased */);
                        writer.Write(token.Username !);
                    }

                    writer.Write(token.AdditionalData);
                }

                writer.Flush();
                var stream = serializationContext.Stream;
                var bytes  = _cryptoSystem.Protect(stream.ToArray());

                var count         = bytes.Length;
                var charsRequired = WebEncoders.GetArraySizeRequiredToEncode(count);
                var chars         = serializationContext.GetChars(charsRequired);
                var outputLength  = WebEncoders.Base64UrlEncode(
                    bytes,
                    offset: 0,
                    output: chars,
                    outputOffset: 0,
                    count: count);

                return(new string(chars, startIndex : 0, length : outputLength));
            }
            finally
            {
                _pool.Return(serializationContext);
            }
        }