Still working on getting client credential flow complete, most of the request works but still working on generating the JWT.
This commit is contained in:
parent
1a8c63808a
commit
8782ef39c6
80 changed files with 1331 additions and 414 deletions
10
IdentityShroud.Core/Security/Keys/Rsa/RsaKeyPolicy.cs
Normal file
10
IdentityShroud.Core/Security/Keys/Rsa/RsaKeyPolicy.cs
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
namespace IdentityShroud.Core.Security.Keys.Rsa;
|
||||
|
||||
public class RsaKeyPolicy : KeyPolicy
|
||||
{
|
||||
public RsaKeyPolicy()
|
||||
{
|
||||
KeyType = KeyType.RSA;
|
||||
KeySize = 2048;
|
||||
}
|
||||
}
|
||||
|
|
@ -4,32 +4,31 @@ using IdentityShroud.Core.Messages;
|
|||
|
||||
namespace IdentityShroud.Core.Security.Keys.Rsa;
|
||||
|
||||
public class RsaKeyPolicy : KeyPolicy
|
||||
{
|
||||
public override string KeyType => "RSA";
|
||||
public int KeySize { get; } = 2048;
|
||||
}
|
||||
|
||||
public class RsaProvider : IKeyProvider
|
||||
{
|
||||
public byte[] CreateKey(KeyPolicy policy)
|
||||
public bool IsPublic => true;
|
||||
|
||||
public KeyData CreateKey(KeyPolicy policy)
|
||||
{
|
||||
if (policy is RsaKeyPolicy p)
|
||||
{
|
||||
using var rsa = RSA.Create(p.KeySize);
|
||||
return rsa.ExportPkcs8PrivateKey();
|
||||
var publicParamaters = rsa.ExportParameters(includePrivateParameters: false);
|
||||
return new KeyData(
|
||||
rsa.ExportPkcs8PrivateKey(),
|
||||
new()
|
||||
{
|
||||
["e"] = Base64Url.EncodeToString(publicParamaters.Exponent),
|
||||
["n"] = Base64Url.EncodeToString(publicParamaters.Modulus),
|
||||
});
|
||||
}
|
||||
|
||||
throw new ArgumentException("Incorrect policy type", nameof(policy));
|
||||
}
|
||||
|
||||
public void SetJwkParameters(byte[] key, JsonWebKey jwk)
|
||||
public void SetJwkParameters(Dictionary<string, string> parameters, JsonWebKey jwk)
|
||||
{
|
||||
using var rsa = RSA.Create();
|
||||
rsa.ImportPkcs8PrivateKey(key, out _);
|
||||
var parameters = rsa.ExportParameters(includePrivateParameters: false);
|
||||
|
||||
jwk.Exponent = Base64Url.EncodeToString(parameters.Exponent);
|
||||
jwk.Modulus = Base64Url.EncodeToString(parameters.Modulus);
|
||||
jwk.Exponent = parameters["e"];
|
||||
jwk.Modulus = parameters["n"];
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue