Far*_*dur 3 c# .net-6.0 duende-identity-server
当我尝试对 duende 身份 6 使用手动密钥管理时,我收到从 api“无法访问已处置对象。对象名称:'RSA'”返回的错误。当我尝试从代码创建 RSA 参数时,它确实有效,但是它不适用于私钥和公钥。
请告诉我下面的代码有什么问题。另外,如果有人能告诉我除此之外的任何其他方法。
Program.cs 中的代码
// this will return signing credentials
SigningCredentials GetSigningCredentials()
{
var p = @"MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAKj/nCpvB71XiFgH
3ykjGU/8SutC680yQjqQdEGh/SDxPAncW5SfavcFSt0K/1UuyyXNc5o9RIcns2rE
4W49T0T4VIP4WhVkAQEvBc4NeLX+o9W3pj6A3dNb+M+2VzZGcFPRtkypNtgxsNJ8
s0b4pmGP9zeMzCkd3UJgCLlZOdz/AgMBAAECgYAzHUywkPB4VjdI2OioWpNXW+mV
CqKjZ6YcbICdMU+MXSpZmSqh4y3JFPK1tJPRwdtzzZY/enR1pI5hprbATw7gQUK1
1SxRIhyC70DSuX6C4dSLQBnXCUzcWokY1IB+iyftHamrtVdTK2IBS7Q9iMAUX49o
XcmDsn8vbAze6mg4YQJBAOCPDcELQtZeZAhEp7Zy4Ks2MGt3YASoDySPrJxCRn5x
WvBynmS+pDbptY7bnV9tk9pIBfxXgooUwbjqGT5WoTcCQQDAqRYhYFtk+8l8Yjmo
Fhr859U6wnjhq9BCzwtRVzPfkpYjOUeHaEJozEUtAKN2y68Aq9zNDdq6SL+9QIcP
MqZ5AkAYsAF+GKPXd3c6Cno5t7V1fTajifM3b9aCWX1LjIm9eu7ZgnBheQgKtXTt
aL2LcTuRAtwNmv1R+ug1UR9HWDTPAkAJHDXCsEbCGLHnYtGtJBZ0nRXVKHsE2NYJ
QrcbSo9WZB0bX0sFmSWCxR4EScJxDKKi2n2faKdOJcCDV3jLfC6pAkBSn5HYh1Wm
ycOUmv6MANXgrmUnmhD23hAMQeJmU4Rs6mzVXCwlJUO3EvgkONjtOUh6NFM9G2gJ
Y1AmxhQIrusw";
var privateKey = p.ToByteArray();
using RSA rsa = RSA.Create();
RSAParameters rsaKeyInfo = rsa.ExportParameters(false);
rsa.ImportPkcs8PrivateKey(privateKey, out _);
var signingCredentials = new SigningCredentials(new RsaSecurityKey(rsa), SecurityAlgorithms.RsaSha256)
{
CryptoProviderFactory = new CryptoProviderFactory { CacheSignatureProviders = false }
};
return signingCredentials;
}
builder.Services.AddIdentityServer(options =>
{
options.LicenseKey =
"xyz";
options.Events.RaiseErrorEvents = true;
options.Events.RaiseInformationEvents = true;
options.Events.RaiseFailureEvents = true;
options.Events.RaiseSuccessEvents = true;
options.EmitStaticAudienceClaim = true;
options.KeyManagement.Enabled = false;
}).AddConfigurationStore(options => options.ConfigureDbContext = b => b.UseSqlServer(connectionString,
opt => opt.MigrationsAssembly(migrationsAssembly)))
.AddOperationalStore(options => options.ConfigureDbContext = b => b.UseSqlServer(connectionString,
opt => opt.MigrationsAssembly(migrationsAssembly)))
.AddSigningCredential(GetSigningCredentials())
.AddAspNetIdentity<ApplicationUser>();
Run Code Online (Sandbox Code Playgroud)
我正在尝试在 duende 身份服务器中使用手动密钥管理创建 jwt 令牌。我尝试使用对称算法,但身份服务器 6 不支持此功能,现在唯一的选择是非对称(RSA 算法)。我想使用私钥和公钥而不是 RSA 参数来完成此操作。
这行:
using RSA rsa = RSA.Create();
Run Code Online (Sandbox Code Playgroud)
从 GetSigningCredentials 函数返回时导致调用 rsa.Dispose()。
这将处理 rsa 对象。
在此之前,这一行:
新的签名凭据(新的 RsaSecurityKey(rsa)
将 RSA 对象传递给从函数返回的 SigningCredentials 对象。
这意味着 SigningCredentials 对象包含对已处置对象的引用,并且一旦该对象使用 rsa 对象,它就会引发异常。
从第一行删除using可以防止丢弃。
所以使用:
RSA rsa = RSA.Create();
Run Code Online (Sandbox Code Playgroud)
反而。