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(), }); }
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(); }
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(); }