Пример #1
0
 internal static Claims From(string json, Func <string, string, bool> verifier, ClaimsAuthority claimsAuthority)
 {
     throw new System.NotImplementedException();
 }
Пример #2
0
        private static Claims TicketToJson(string ticket, Func <string, string, bool> verifier, ClaimsAuthority claimsAuthority)
        {
            Contract.Assert(Conf.Preamble.Equals(ticket.Substring(0, Conf.Preamble.Length)), "preamble missing or corrupt");
            var versionAndClaimAndImpersonator = ticket.Substring(Conf.Preamble.Length).Split(Conf.VersionAndClaimAndImpersonatorSeperator);
            var version = versionAndClaimAndImpersonator[Conf.VersionIndex];
            var claimAndSignatureBlock = versionAndClaimAndImpersonator[Conf.ClaimIndex];
            var impersonator           = versionAndClaimAndImpersonator.Length + 1 == Conf.ImpersonatorIndex ? versionAndClaimAndImpersonator[Conf.ImpersonatorIndex] : string.Empty;

            Contract.Assert(!string.IsNullOrWhiteSpace(version), "parser error -- version is required");
            Contract.Assert(!string.IsNullOrWhiteSpace(claimAndSignatureBlock), "parser error -- claim and signature are required");
            var claimAndSignature  = claimAndSignatureBlock.Split(Conf.ClaimAndSignatureSeperator);
            var claimSectionsBlock = claimAndSignature[Conf.ClaimSectionsIndex];
            var signature          = claimAndSignature[Conf.SignatureIndex];
            var encoded            = claimSectionsBlock;
            var claimSections      = claimSectionsBlock.Split(Conf.SectionSeperator);
            var claimset           = claimSections[Conf.ClaimsetIndex];
            var details            = claimSections[Conf.DetailsIndex];
            var expiration         = claimSections[Conf.TimestampIndex];

            Contract.Assert(!string.IsNullOrWhiteSpace(claimset), "parser error -- claimset section is required");
            Contract.Assert(!string.IsNullOrWhiteSpace(details), "parser error -- details section is required");
            Contract.Assert(!string.IsNullOrWhiteSpace(expiration), "parser error -- expiration section is required");
            var detailBlocks  = details.Split(Conf.ItemSeperator);
            var len           = detailBlocks.Length;
            var i             = -1;
            var parsedDetails = new Dictionary <string, Dictionary <string, string> >();

            while (++i < len)
            {
                var block           = detailBlocks[i].Split(Conf.ClaimsetSeparator);
                var claimsetId      = new ArraySegment <string>(block, Conf.ClaimsetIdIndex, Conf.ClaimsetDetailsIndex - Conf.ClaimsetIdIndex).First();
                var rawDetailsArray = new ArraySegment <string>(block, Conf.ClaimsetDetailsIndex, block.Length - Conf.ClaimsetDetailsIndex).ToArray();
                var detailsArrayLen = rawDetailsArray.Length;
                var j            = -1;
                var parsedValues = new Dictionary <string, string>();
                while (++j < detailsArrayLen)
                {
                    var rules        = rawDetailsArray[j].Split(Conf.DetailSeperator);
                    var detailRuleId = rules[Conf.DetailsRuleIdIndex];
                    var detail       = rules[Conf.DetailsRuleIndex];
                    parsedValues[detailRuleId] = detail;
                }
                parsedDetails[claimsetId] = parsedValues;
            }
            var claimBlocks = claimset.Split(Conf.ItemSeperator);

            len = claimBlocks.Length;
            i   = -1;
            var claimsets           = new Dictionary <string, Claimset>();
            var knownIdentityValues = new Dictionary <string, string>();

            while (++i < len)
            {
                var block         = claimBlocks[i].Split(Conf.ClaimsetSeparator);
                var claimsetId    = block[Conf.ClaimsetIdIndex];
                var claimsetRules = int.Parse(block[Conf.ClaimsetRulesIndex], System.Globalization.NumberStyles.HexNumber);
                var claims        = new Dictionary <string, Claim>();
                var b             = 1;
                while (b <= claimsetRules)
                {
                    if (b == (b & claimsetRules))
                    {
                        var claimId           = b.ToString("x");
                        var claimOptionsValue = default(string);
                        if (parsedDetails.ContainsKey(claimsetId))
                        {
                            var claimsetDetails = parsedDetails[claimsetId];
                            var encodedValue    = claimsetDetails[claimId];
                            claimOptionsValue = Encoding.UTF8.GetString(Convert.FromBase64String(encodedValue));
                        }
                        var claimOptionsKind = !string.IsNullOrWhiteSpace(claimOptionsValue) ? ClaimKind.Identity : ClaimKind.Unknown;
                        claims[claimId] = new Claim(id: claimId, kind: claimOptionsKind, value: claimOptionsValue);
                    }
                    b *= 2;
                }
                claimsets[claimsetId] = new Claimset(id: claimsetId, claims: claims, signature: signature);
            }
            var result = new Claims(claimsets, Convert.ToDateTime(expiration), signature, encoded, ticket, verifier, claimsAuthority);

            return(result);
        }
Пример #3
0
 internal static Claims Parse(string ticket, Func <string, string, bool> verifier, ClaimsAuthority claimsAuthority)
 {
     return(TicketToJson(ticket, verifier, claimsAuthority));
 }
Пример #4
0
 private static Claims TicketToJson(string ticket, Func<string, string, bool> verifier, ClaimsAuthority claimsAuthority)
 {
     Contract.Assert(Conf.Preamble.Equals(ticket.Substring(0, Conf.Preamble.Length)), "preamble missing or corrupt");
     var versionAndClaimAndImpersonator = ticket.Substring(Conf.Preamble.Length).Split(Conf.VersionAndClaimAndImpersonatorSeperator);
     var version = versionAndClaimAndImpersonator[Conf.VersionIndex];
     var claimAndSignatureBlock = versionAndClaimAndImpersonator[Conf.ClaimIndex];
     var impersonator = versionAndClaimAndImpersonator.Length + 1 == Conf.ImpersonatorIndex ? versionAndClaimAndImpersonator[Conf.ImpersonatorIndex] : string.Empty;
     Contract.Assert(!string.IsNullOrWhiteSpace(version), "parser error -- version is required");
     Contract.Assert(!string.IsNullOrWhiteSpace(claimAndSignatureBlock), "parser error -- claim and signature are required");
     var claimAndSignature = claimAndSignatureBlock.Split(Conf.ClaimAndSignatureSeperator);
     var claimSectionsBlock = claimAndSignature[Conf.ClaimSectionsIndex];
     var signature = claimAndSignature[Conf.SignatureIndex];
     var encoded = claimSectionsBlock;
     var claimSections = claimSectionsBlock.Split(Conf.SectionSeperator);
     var claimset = claimSections[Conf.ClaimsetIndex];
     var details = claimSections[Conf.DetailsIndex];
     var expiration = claimSections[Conf.TimestampIndex];
     Contract.Assert(!string.IsNullOrWhiteSpace(claimset), "parser error -- claimset section is required");
     Contract.Assert(!string.IsNullOrWhiteSpace(details), "parser error -- details section is required");
     Contract.Assert(!string.IsNullOrWhiteSpace(expiration), "parser error -- expiration section is required");
     var detailBlocks = details.Split(Conf.ItemSeperator);
     var len = detailBlocks.Length;
     var i = -1;
     var parsedDetails = new Dictionary<string, Dictionary<string, string>>();
     while (++i < len)
     {
         var block = detailBlocks[i].Split(Conf.ClaimsetSeparator);
         var claimsetId = new ArraySegment<string>(block, Conf.ClaimsetIdIndex, Conf.ClaimsetDetailsIndex - Conf.ClaimsetIdIndex).First();
         var rawDetailsArray = new ArraySegment<string>(block, Conf.ClaimsetDetailsIndex, block.Length - Conf.ClaimsetDetailsIndex).ToArray();
         var detailsArrayLen = rawDetailsArray.Length;
         var j = -1;
         var parsedValues = new Dictionary<string, string>();
         while (++j < detailsArrayLen)
         {
             var rules = rawDetailsArray[j].Split(Conf.DetailSeperator);
             var detailRuleId = rules[Conf.DetailsRuleIdIndex];
             var detail = rules[Conf.DetailsRuleIndex];
             parsedValues[detailRuleId] = detail;
         }
         parsedDetails[claimsetId] = parsedValues;
     }
     var claimBlocks = claimset.Split(Conf.ItemSeperator);
     len = claimBlocks.Length;
     i = -1;
     var claimsets = new Dictionary<string, Claimset>();
     var knownIdentityValues = new Dictionary<string, string>();
     while (++i < len)
     {
         var block = claimBlocks[i].Split(Conf.ClaimsetSeparator);
         var claimsetId = block[Conf.ClaimsetIdIndex];
         var claimsetRules = int.Parse(block[Conf.ClaimsetRulesIndex], System.Globalization.NumberStyles.HexNumber);
         var claims = new Dictionary<string, Claim>();
         var b = 1;
         while (b <= claimsetRules)
         {
             if (b == (b & claimsetRules))
             {
                 var claimId = b.ToString("x");
                 var claimOptionsValue = default(string);
                 if (parsedDetails.ContainsKey(claimsetId))
                 {
                     var claimsetDetails = parsedDetails[claimsetId];
                     var encodedValue = claimsetDetails[claimId];
                     claimOptionsValue = Encoding.UTF8.GetString(Convert.FromBase64String(encodedValue));
                 }
                 var claimOptionsKind = !string.IsNullOrWhiteSpace(claimOptionsValue) ? ClaimKind.Identity : ClaimKind.Unknown;
                 claims[claimId] = new Claim(id: claimId, kind: claimOptionsKind, value: claimOptionsValue);
             }
             b *= 2;
         }
         claimsets[claimsetId] = new Claimset(id: claimsetId, claims: claims, signature: signature);
     }
     var result = new Claims(claimsets, Convert.ToDateTime(expiration), signature, encoded, ticket, verifier, claimsAuthority);
     return result;
 }
Пример #5
0
 internal static Claims Parse(string ticket, Func<string, string, bool> verifier, ClaimsAuthority claimsAuthority)
 {
     return TicketToJson(ticket, verifier, claimsAuthority);
 }
Пример #6
0
 internal static Claims From(string json, Func<string, string, bool> verifier, ClaimsAuthority claimsAuthority)
 {
     throw new System.NotImplementedException();
 }
Пример #7
0
 public ClaimsFactory(Func <string, string, bool> verifier, ClaimsAuthority claimsAuthority)
 {
     _verifier        = verifier;
     _claimsAuthority = claimsAuthority;
 }