コード例 #1
0
        public override bool Add(TicketCacheEntry entry)
        {
            if (entry.Value is KerberosClientCacheEntry cacheEntry)
            {
                var cred = KrbCred.WrapTicket(
                    cacheEntry.KdcResponse.Ticket,
                    new KrbCredInfo
                {
                    Key       = cacheEntry.SessionKey,
                    AuthTime  = cacheEntry.AuthTime,
                    EndTime   = cacheEntry.EndTime,
                    Flags     = cacheEntry.Flags,
                    PName     = cacheEntry.KdcResponse.CName,
                    Realm     = cacheEntry.KdcResponse.CRealm,
                    RenewTill = cacheEntry.RenewTill,
                    SName     = cacheEntry.KdcResponse.Ticket.SName,
                    SRealm    = cacheEntry.KdcResponse.Ticket.Realm,
                    StartTime = cacheEntry.StartTime
                }
                    );

                lsa.ImportCredential(cred);
            }

            return(true);
        }
コード例 #2
0
ファイル: ValidatorTests.cs プロジェクト: dotnet/Kerberos.NET
        public async Task ValidatorMemoryCacheExpirationExpired()
        {
            var config = Krb5Config.Default();

            config.Defaults.ClockSkew = TimeSpan.Zero;

            using (var logger = new FakeExceptionLoggerFactory())
                using (var replay = new TicketReplayValidator(config, logger))
                {
                    var entry = new TicketCacheEntry
                    {
                        Key     = "blargh",
                        Expires = DateTimeOffset.UtcNow.AddMilliseconds(100)
                    };

                    var added = await replay.Add(entry);

                    Assert.IsTrue(added);

                    await Task.Delay(TimeSpan.FromSeconds(1));

                    added = await replay.Add(entry);

                    Assert.IsTrue(added);

                    Assert.IsTrue(logger.Logs.Count() > 1);
                }
        }
コード例 #3
0
        internal void Add(TicketCacheEntry entry)
        {
            var existing = this.FindCredential(entry.Key);

            if (existing != null)
            {
                this.Credentials.Remove(existing);
            }

            if (entry.Value is KerberosClientCacheEntry entryValue)
            {
                if (entryValue.KdcResponse is KrbAsRep asRep && !this.Credentials.Any())
                {
                    this.DefaultPrincipalName = FromResponse(asRep, asRep.CName);
                }

                this.Credentials.Add(new Krb5Credential
                {
                    Ticket       = entryValue.KdcResponse.Ticket.EncodeApplication(),
                    KeyBlock     = new KeyValuePair <EncryptionType, ReadOnlyMemory <byte> >(entryValue.SessionKey.EType, entryValue.SessionKey.KeyValue),
                    Client       = FromResponse(entryValue.KdcResponse, entryValue.KdcResponse.CName),
                    Server       = FromResponse(entryValue.KdcResponse, entryValue.KdcResponse.Ticket.SName),
                    AuthData     = new List <KrbAuthorizationData>(),
                    EndTime      = entry.Expires,
                    RenewTill    = entry.RenewUntil ?? DateTimeOffset.MinValue,
                    Addresses    = new List <KrbHostAddress>(),
                    SecondTicket = Array.Empty <byte>(),
                    Flags        = entryValue.Flags
                });
            }
        }
コード例 #4
0
        public override ValueTask <bool> AddAsync(TicketCacheEntry entry)
        {
            if (this.Add(entry))
            {
                return(new ValueTask <bool>(true));
            }

            return(new ValueTask <bool>(false));
        }
コード例 #5
0
        public async Task TestValidatorMemoryCacheExpiration()
        {
            var replay = new TicketReplayValidator();

            var entry = new TicketCacheEntry {
                Key     = "blargh",
                Expires = DateTimeOffset.UtcNow.AddHours(1)
            };

            var added = await replay.Add(entry);

            Assert.IsTrue(added);

            added = await replay.Add(entry);

            Assert.IsFalse(added);
        }
コード例 #6
0
        public async Task TestValidatorMemoryCacheExpirationExpired()
        {
            var replay = new TicketReplayValidator();

            var entry = new TicketCacheEntry
            {
                Key     = "blargh",
                Expires = DateTimeOffset.UtcNow.AddSeconds(1)
            };

            var added = await replay.Add(entry);

            Assert.IsTrue(added);

            await Task.Delay(TimeSpan.FromSeconds(3));

            added = await replay.Add(entry);

            Assert.IsTrue(added);
        }
コード例 #7
0
        public async Task ValidatorMemoryCacheExpiration()
        {
            var logger = new FakeExceptionLoggerFactory();

            var replay = new TicketReplayValidator(logger);

            var entry = new TicketCacheEntry
            {
                Key     = "blargh",
                Expires = DateTimeOffset.UtcNow.AddHours(1)
            };

            var added = await replay.Add(entry);

            Assert.IsTrue(added);

            Assert.AreEqual(1, logger.Logs.Count());

            added = await replay.Add(entry);

            Assert.IsFalse(added);
        }
コード例 #8
0
ファイル: ValidatorTests.cs プロジェクト: dotnet/Kerberos.NET
        public async Task ValidatorMemoryCacheExpirationExpired_WithinSkew()
        {
            using (var logger = new FakeExceptionLoggerFactory())
                using (var replay = new TicketReplayValidator(logger))
                {
                    var entry = new TicketCacheEntry
                    {
                        Key     = "blargh",
                        Expires = DateTimeOffset.UtcNow.AddMilliseconds(100)
                    };

                    var added = await replay.Add(entry);

                    Assert.IsTrue(added);

                    await Task.Delay(TimeSpan.FromSeconds(1));

                    added = await replay.Add(entry);

                    Assert.IsFalse(added);
                }
        }
コード例 #9
0
        public async Task ValidatorMemoryCacheExpirationExpired()
        {
            var logger = new FakeExceptionLoggerFactory();

            var replay = new TicketReplayValidator(logger);

            var entry = new TicketCacheEntry
            {
                Key     = "blargh",
                Expires = DateTimeOffset.UtcNow.AddMilliseconds(100)
            };

            var added = await replay.Add(entry);

            Assert.IsTrue(added);

            await Task.Delay(TimeSpan.FromSeconds(5));

            added = await replay.Add(entry);

            Assert.IsTrue(added);

            Assert.AreEqual(2, logger.Logs.Count());
        }
コード例 #10
0
 public override ValueTask <bool> ContainsAsync(TicketCacheEntry entry) => new(false);
コード例 #11
0
        internal bool Contains(TicketCacheEntry entry)
        {
            Krb5Credential cred = this.FindCredential(entry.Key);

            return(cred != null);
        }
コード例 #12
0
 public ValueTask <bool> ContainsAsync(TicketCacheEntry entry)
 {
     throw new NotImplementedException();
 }
コード例 #13
0
 public bool Contains(TicketCacheEntry entry)
 {
     throw new NotImplementedException();
 }