Пример #1
0
        public async Task <CodeGrant> GetCodeGrantAsync(string code)
        {
            var outbackCodeGrant = await _outbackDbContext.CodeGrants.Include(m => m.Client).SingleOrDefaultAsync(m => m.Code == code && m.Resolved == null);

            if (outbackCodeGrant == default)
            {
                throw new Exception($"Code grant not found for code {code}");
            }

            outbackCodeGrant.Resolved = DateTimeOffset.Now;
            await _outbackDbContext.SaveChangesAsync();

            return(new CodeGrant
            {
                ClientId = outbackCodeGrant.Client.ClientId,
                Code = outbackCodeGrant.Code,
                CodeChallange = outbackCodeGrant.CodeChallange,
                CodeChallangeMethod = outbackCodeGrant.CodeChallangeMethod,
                Created = outbackCodeGrant.Created,
                Expires = outbackCodeGrant.Expires,
                Nonce = outbackCodeGrant.Nonce,
                RedirectUri = outbackCodeGrant.RedirectUri,
                Scope = outbackCodeGrant.Scope,
                State = outbackCodeGrant.State,
                SubjectId = outbackCodeGrant.SubjectId.ToString(),
            });
        }
Пример #2
0
        public async Task DeleteClient(string clientId)
        {
            var client = await _outbackDbContext.Clients.SingleOrDefaultAsync(m => m.ClientId == clientId);

            if (client == default)
            {
                throw new Exception($"Client with id {clientId} not found");
            }

            _outbackDbContext.Clients.Remove(client);

            await _outbackDbContext.SaveChangesAsync();
        }
Пример #3
0
        private async Task CreateSigningKey()
        {
            if (await _outbackDbContext.Secrets.AnyAsync())
            {
                return;
            }

            var secret = ECDsa.Create(ECCurve.NamedCurves.nistP256);

            var ecdSaKey = new ECDsaSecurityKey(secret)
            {
                KeyId = _randomStringGenerator.GetRandomString(20)
            };

            var publicKey = ecdSaKey.ECDsa.ExportParameters(true);

            var cryptographyParameters = new CryptographyParameters
            {
                EncodedD = Base64UrlEncoder.Encode(publicKey.D),
                EncodedX = Base64UrlEncoder.Encode(publicKey.Q.X),
                EncodedY = Base64UrlEncoder.Encode(publicKey.Q.Y),
                KeyId    = ecdSaKey.KeyId
            };

            var outbackSecret = new OutbackSecret
            {
                ActiveSigningKey          = true,
                CryptographyData          = JsonSerializer.Serialize(cryptographyParameters),
                Expires                   = DateTime.UtcNow.AddYears(100),
                PublicKeyCryptographyType = PublicKeyCryptographyType.EC_NistP256,
            };

            await _outbackDbContext.Secrets.AddAsync(outbackSecret);

            await _outbackDbContext.SaveChangesAsync();
        }