diff --git a/src/Bulwark.Auth.Core/Account.cs b/src/Bulwark.Auth.Core/Account.cs
index 2570f1b..44c629d 100644
--- a/src/Bulwark.Auth.Core/Account.cs
+++ b/src/Bulwark.Auth.Core/Account.cs
@@ -14,10 +14,10 @@ public class Account
private readonly JwtTokenizer _tokenizer;
public Account(IAccountRepository accountRepository,
- SigningKey signingKey)
+ JwtTokenizer tokenizer)
{
_accountRepository = accountRepository;
- _tokenizer = signingKey.Tokenizer;
+ _tokenizer = tokenizer;
}
///
diff --git a/src/Bulwark.Auth.Core/Authentication.cs b/src/Bulwark.Auth.Core/Authentication.cs
index c346069..d108ae8 100644
--- a/src/Bulwark.Auth.Core/Authentication.cs
+++ b/src/Bulwark.Auth.Core/Authentication.cs
@@ -17,13 +17,13 @@ public class Authentication
private readonly IEncrypt _encrypt;
public Authentication(
- SigningKey signingKey,
+ JwtTokenizer tokenizer,
ITokenRepository tokenRepository,
IEncrypt encrypt,
IAccountRepository accountRepository,
IAuthorizationRepository authorizationRepository)
{
- _tokenizer = signingKey.Tokenizer;
+ _tokenizer = tokenizer;
_accountRepository = accountRepository;
_tokenRepository = tokenRepository;
_authorizationRepository = authorizationRepository;
@@ -36,11 +36,10 @@ public Authentication(
///
///
///
- ///
/// Authenticated
///
public async Task Authenticate(string email,
- string password, string tokenizerName = "jwt")
+ string password)
{
try
{
diff --git a/src/Bulwark.Auth.Core/JwtTokenizer.cs b/src/Bulwark.Auth.Core/JwtTokenizer.cs
index b999ad6..b51cc65 100644
--- a/src/Bulwark.Auth.Core/JwtTokenizer.cs
+++ b/src/Bulwark.Auth.Core/JwtTokenizer.cs
@@ -29,8 +29,9 @@ public JwtTokenizer(string issuer, string audience,
int accessTokenExpInMin,
int refreshTokenExpInHours,
List signingAlgorithms,
- IEnumerable keys)
+ SigningKey signingKey)
{
+ var keys = signingKey.GetKeys();
foreach(var key in keys)
{
_keys.Add(key.Created, key);
diff --git a/src/Bulwark.Auth.Core/MagicCode.cs b/src/Bulwark.Auth.Core/MagicCode.cs
index a0c8895..83e9fe3 100644
--- a/src/Bulwark.Auth.Core/MagicCode.cs
+++ b/src/Bulwark.Auth.Core/MagicCode.cs
@@ -22,13 +22,13 @@ public class MagicCode{
public MagicCode(IMagicCodeRepository magicCodeRepository,
IAccountRepository accountRepository, IAuthorizationRepository authorizationRepository,
- SigningKey signingKey)
+ JwtTokenizer tokenizer)
{
_accountRepository = accountRepository;
_magicCodeRepository = magicCodeRepository;
_authorizationRepository = authorizationRepository;
- _tokenizer = signingKey.Tokenizer;
+ _tokenizer = tokenizer;
}
///
diff --git a/src/Bulwark.Auth.Core/SigningKey.cs b/src/Bulwark.Auth.Core/SigningKey.cs
index 8226cac..f408780 100644
--- a/src/Bulwark.Auth.Core/SigningKey.cs
+++ b/src/Bulwark.Auth.Core/SigningKey.cs
@@ -12,9 +12,6 @@ namespace Bulwark.Auth.Core;
public class SigningKey
{
private readonly ISigningKeyRepository _signingKeyRepository;
- private const string DefaultIssuer = "bulwark";
- public JwtTokenizer Tokenizer { get; private set; }
-
public SigningKey(ISigningKeyRepository signingKeyRepository)
{
_signingKeyRepository = signingKeyRepository;
@@ -52,23 +49,9 @@ public List GetKeys()
private void Initialize()
{
var latestCert = _signingKeyRepository.GetLatestKey();
- if(latestCert == null)
- {
- var key = RsaKeyGenerator.MakeKey();
- _signingKeyRepository.AddKey(key.PrivateKey, key.PublicKey);
- }
-
- var signingAlgorithms = new List
- {
- new Rsa256(),
- new Rsa384(),
- new Rsa512()
- };
-
- Tokenizer = new JwtTokenizer(DefaultIssuer, DefaultIssuer,
- 10,24,
- signingAlgorithms,
- GetKeys().ToArray());
+ if (latestCert != null) return;
+ var key = RsaKeyGenerator.MakeKey();
+ _signingKeyRepository.AddKey(key.PrivateKey, key.PublicKey);
}
}
diff --git a/src/Bulwark.Auth.Core/Social/SocialLogin.cs b/src/Bulwark.Auth.Core/Social/SocialLogin.cs
index 0cf7683..ec3ed20 100644
--- a/src/Bulwark.Auth.Core/Social/SocialLogin.cs
+++ b/src/Bulwark.Auth.Core/Social/SocialLogin.cs
@@ -16,12 +16,12 @@ public class SocialLogin {
public SocialLogin(IValidatorStrategies validatorStrategies,
IAccountRepository accountRepository, IAuthorizationRepository authorizationRepository,
- SigningKey signingKey)
+ JwtTokenizer tokenizer)
{
_socialValidators = validatorStrategies.GetAll();
_accountRepository = accountRepository;
_authorizationRepository = authorizationRepository;
- _tokenizer = signingKey.Tokenizer;
+ _tokenizer = tokenizer;
}
public void AddValidator(ISocialValidator validator)
diff --git a/src/Bulwark.Auth/Program.cs b/src/Bulwark.Auth/Program.cs
index 3509911..9c263fa 100644
--- a/src/Bulwark.Auth/Program.cs
+++ b/src/Bulwark.Auth/Program.cs
@@ -1,9 +1,11 @@
+using System.Collections.Generic;
using dotenv.net;
using FluentEmail.MailKitSmtp;
using System.IO;
using Bulwark.Auth;
using Bulwark.Auth.Core;
using Bulwark.Auth.Core.PasswordPolicy;
+using Bulwark.Auth.Core.SigningAlgs;
using Bulwark.Auth.Core.Social;
using Bulwark.Auth.Core.Social.Validators;
using Bulwark.Auth.Repositories;
@@ -71,7 +73,17 @@
var passwordNumber = new PasswordNumber();
passwordPolicy.Add(passwordNumber);
+var signingAlgorithms = new List
+{
+ new Rsa256(),
+ new Rsa384(),
+ new Rsa512()
+};
+
applicationBuilder.Services.AddSingleton(passwordPolicy);
+applicationBuilder.Services.AddSingleton(t => new JwtTokenizer("bulwark", "bulwark",
+ appConfig.AccessTokenExpireInMinutes, appConfig.RefreshTokenExpireInHours,
+ signingAlgorithms, t.GetService()));
applicationBuilder.Services.AddSingleton(mongoClient.GetDatabase(dbName));
applicationBuilder.Services.AddTransient();
applicationBuilder.Services.AddTransient();
diff --git a/tests/Bulwark.Auth.Core.Tests/AccountTests.cs b/tests/Bulwark.Auth.Core.Tests/AccountTests.cs
index 5a42dac..fde5e9f 100644
--- a/tests/Bulwark.Auth.Core.Tests/AccountTests.cs
+++ b/tests/Bulwark.Auth.Core.Tests/AccountTests.cs
@@ -1,4 +1,6 @@
-using Bulwark.Auth.Repositories;
+using System.Collections.Generic;
+using Bulwark.Auth.Core.SigningAlgs;
+using Bulwark.Auth.Repositories;
using Bulwark.Auth.Repositories.Util;
using Bulwark.Auth.TestFixture;
@@ -15,13 +17,15 @@ public AccountTests(MongoDbRandomFixture dbFixture)
{
var encrypt = new BulwarkBCrypt();
var accountRepository = new MongoDbAccount(dbFixture.Db, encrypt);
- var certRepository = new MongoDbSigningKey(dbFixture.Db);
- var certManager = new SigningKey(certRepository);
- _account = new Account(accountRepository,certManager);
+ var signingKeyRepository = new MongoDbSigningKey(dbFixture.Db);
+ var signingKey = new SigningKey(signingKeyRepository);
+ var jwtTokenizer = new JwtTokenizer("test", "test", 10, 24,
+ new List {new Rsa256()}, signingKey);
+ _account = new Account(accountRepository, jwtTokenizer);
var tokenRepository = new MongoDbAuthToken(dbFixture.Db);
var authorizationRepository = new MongoDbAuthorization(dbFixture.Db);
_authentication = new Authentication(
- certManager, tokenRepository, encrypt, accountRepository, authorizationRepository);
+ jwtTokenizer, tokenRepository, encrypt, accountRepository, authorizationRepository);
}
[Fact]
diff --git a/tests/Bulwark.Auth.Core.Tests/AuthenticateTest.cs b/tests/Bulwark.Auth.Core.Tests/AuthenticateTest.cs
index a170aa7..47bde7d 100644
--- a/tests/Bulwark.Auth.Core.Tests/AuthenticateTest.cs
+++ b/tests/Bulwark.Auth.Core.Tests/AuthenticateTest.cs
@@ -1,4 +1,6 @@
-using Bulwark.Auth.Core.Exception;
+using System.Collections.Generic;
+using Bulwark.Auth.Core.Exception;
+using Bulwark.Auth.Core.SigningAlgs;
using Bulwark.Auth.Repositories;
using Bulwark.Auth.Repositories.Util;
using Bulwark.Auth.TestFixture;
@@ -20,13 +22,15 @@ public AuthenticateTest(MongoDbRandomFixture dbFixture)
var encrypt = new BulwarkBCrypt();
var accountRepository = new MongoDbAccount(dbFixture.Db,
encrypt);
- var certRepository = new MongoDbSigningKey(dbFixture.Db);
- var certManager = new SigningKey(certRepository);
- _account = new Account(accountRepository, certManager);
+ var signingKeyRepository = new MongoDbSigningKey(dbFixture.Db);
+ var signingKey = new SigningKey(signingKeyRepository);
+ var jwtTokenizer = new JwtTokenizer("test", "test", 10, 24,
+ new List {new Rsa256()}, signingKey);
+ _account = new Account(accountRepository, jwtTokenizer);
var tokenRepository = new MongoDbAuthToken(dbFixture.Db);
var authorizationRepository = new MongoDbAuthorization(dbFixture.Db);
- _authentication = new Authentication(
- certManager, tokenRepository, encrypt, accountRepository, authorizationRepository);
+ _authentication = new Authentication(jwtTokenizer,
+ tokenRepository, encrypt, accountRepository, authorizationRepository);
}
[Fact]
diff --git a/tests/Bulwark.Auth.Core.Tests/JwtTokenizerTests.cs b/tests/Bulwark.Auth.Core.Tests/JwtTokenizerTests.cs
index 9f260f1..6add3c8 100644
--- a/tests/Bulwark.Auth.Core.Tests/JwtTokenizerTests.cs
+++ b/tests/Bulwark.Auth.Core.Tests/JwtTokenizerTests.cs
@@ -2,15 +2,18 @@
using Bulwark.Auth.Core.Domain;
using Bulwark.Auth.Core.SigningAlgs;
using Bulwark.Auth.Core.Util;
+using Bulwark.Auth.Repositories;
+using Bulwark.Auth.TestFixture;
namespace Bulwark.Auth.Core.Tests;
-public class JwtTokenizerTests
+public class JwtTokenizerTests : IClassFixture
{
private readonly JwtTokenizer _tokenizer;
- public JwtTokenizerTests()
+ public JwtTokenizerTests(MongoDbRandomFixture dbFixture)
{
+ var signingKey = new SigningKey(new MongoDbSigningKey(dbFixture.Db));
var key = RsaKeyGenerator.MakeKey();
var keys = new Key[1];
keys[0] = key;
@@ -19,7 +22,7 @@ public JwtTokenizerTests()
new Rsa256()
};
_tokenizer = new JwtTokenizer("test", "test", 10,24,
- signingAlgorithms,keys);
+ signingAlgorithms,signingKey);
}
[Fact]
diff --git a/tests/Bulwark.Auth.Core.Tests/MagicCodeTests.cs b/tests/Bulwark.Auth.Core.Tests/MagicCodeTests.cs
index 5026d79..a064462 100644
--- a/tests/Bulwark.Auth.Core.Tests/MagicCodeTests.cs
+++ b/tests/Bulwark.Auth.Core.Tests/MagicCodeTests.cs
@@ -1,4 +1,6 @@
-using Bulwark.Auth.Repositories;
+using System.Collections.Generic;
+using Bulwark.Auth.Core.SigningAlgs;
+using Bulwark.Auth.Repositories;
using Bulwark.Auth.Repositories.Util;
using Bulwark.Auth.TestFixture;
@@ -21,14 +23,16 @@ public async void CreateAndAuthenticateMagicCode()
var encrypt = new BulwarkBCrypt();
var accountRepository = new MongoDbAccount(_dbFixture.Db,
encrypt);
- var certRepository = new MongoDbSigningKey(_dbFixture.Db);
- var certManager = new SigningKey(certRepository);
+ var signingKeyRepository = new MongoDbSigningKey(_dbFixture.Db);
+ var signingKey = new SigningKey(signingKeyRepository);
+ var jwtTokenizer = new JwtTokenizer("test", "test", 10, 24,
+ new List {new Rsa256()}, signingKey);
var magicCodeRepository = new MongoDbMagicCode(_dbFixture.Db);
var authorizationRepository = new MongoDbAuthorization(_dbFixture.Db);
var magicCodeManager = new MagicCode(magicCodeRepository,
- accountRepository, authorizationRepository, certManager);
+ accountRepository, authorizationRepository, jwtTokenizer);
var accountManager = new Account(accountRepository,
- certManager);
+ jwtTokenizer);
var user = TestUtils.GenerateEmail();
var verificationToken = await accountManager.Create(user,
"strongpassword");
diff --git a/tests/Bulwark.Auth.Core.Tests/SigningKeyTests.cs b/tests/Bulwark.Auth.Core.Tests/SigningKeyTests.cs
index f24f192..3cced16 100644
--- a/tests/Bulwark.Auth.Core.Tests/SigningKeyTests.cs
+++ b/tests/Bulwark.Auth.Core.Tests/SigningKeyTests.cs
@@ -27,7 +27,6 @@ public void SigningKeyManagerInitialize()
var signingKeyManager = new SigningKey(signingRepository);
var signingKeyModel = signingRepository.GetLatestKey();
Assert.NotNull(signingKeyModel);
- Assert.NotNull(signingKeyManager.Tokenizer);
signingKeyManager.GenerateKey();
var signingKeyModel2 = signingRepository.GetLatestKey();
Assert.NotEqual(signingKeyModel.KeyId, signingKeyModel2.KeyId);
diff --git a/tests/Bulwark.Auth.Core.Tests/SocialTests.cs b/tests/Bulwark.Auth.Core.Tests/SocialTests.cs
index 8cd77c9..086c3c4 100644
--- a/tests/Bulwark.Auth.Core.Tests/SocialTests.cs
+++ b/tests/Bulwark.Auth.Core.Tests/SocialTests.cs
@@ -1,4 +1,6 @@
-using Bulwark.Auth.Core.Social;
+using System.Collections.Generic;
+using Bulwark.Auth.Core.SigningAlgs;
+using Bulwark.Auth.Core.Social;
using Bulwark.Auth.Core.Social.Validators;
using Bulwark.Auth.Core.Tests.Mocks;
using Bulwark.Auth.Repositories;
@@ -20,8 +22,10 @@ public SocialTests(MongoDbRandomFixture dbFixture)
IValidatorStrategies validators = new ValidatorStrategies();
IAccountRepository accountRepository = new MongoDbAccount(dbFixture1.Db,
encrypt);
- ISigningKeyRepository signingKeyRepository = new MongoDbSigningKey(dbFixture1.Db);
- SigningKey signingKey = new SigningKey(signingKeyRepository);
+ var signingKeyRepository = new MongoDbSigningKey(dbFixture.Db);
+ var signingKey = new SigningKey(signingKeyRepository);
+ var jwtTokenizer = new JwtTokenizer("test", "test", 10, 24,
+ new List {new Rsa256()}, signingKey);
new MongoDbAuthToken(dbFixture1.Db);
validators.Add(new MockSocialValidator("bulwark"));
validators.Add(new GoogleValidator(
@@ -30,7 +34,7 @@ public SocialTests(MongoDbRandomFixture dbFixture)
validators.Add(new GithubValidator("lateflip.io" ));
var authorizationRepository = new MongoDbAuthorization(dbFixture1.Db);
_socialLogin = new SocialLogin(validators, accountRepository,
- authorizationRepository, signingKey);
+ authorizationRepository, jwtTokenizer);
}
[Fact]