RSA KeyPair公钥导入无法正常工作

时间:2018-04-11 06:36:59

标签: authentication iis jwt rsa key-pair

我在IIS中遇到了RSA KeyPairs的奇怪问题。我有一个应用程序,它使用私钥生成签名的JWT令牌。我导出了公钥,我想在另一个消耗这些JWT令牌的应用程序中使用它(用于JWT承载认证)。

从技术上讲,有一个javascript客户端从第一个应用程序WebAPI后端获取JWT令牌,并在对第二个WebAPI后端进行身份验证时使用它。

此代码用于加载公钥和设置身份验证(使用OWIN启动):

// USE from container
string KEY_CONTAINER_NAME = "MyContainer";
int KEY_SIZE = 2048;
CspParameters cspParams = new CspParameters();
cspParams.Flags |= CspProviderFlags.UseMachineKeyStore;
cspParams.KeyContainerName = KEY_CONTAINER_NAME;
var rsa = new RSACryptoServiceProvider(KEY_SIZE, cspParams);

// Api controllers with an [Authorize] attribute will be validated with JWT
appBuilder.UseJwtBearerAuthentication(
    new JwtBearerAuthenticationOptions
    {
        AuthenticationMode = AuthenticationMode.Active,
        AllowedAudiences = new[] { "MyAudience" },
        TokenValidationParameters = new TokenValidationParameters
        {
            IssuerSigningToken = new System.IdentityModel.Tokens.RsaSecurityToken(rsa),
            ValidAudience = "MyAudience",
            ValidIssuer = "MyIssuer"
        }
    });

我用这个命令将公钥导入存储:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319>.\aspnet_regiis.exe -pi MyContainer C:\PublicKey.xml

这不起作用。加载并使用公钥但从不验证传入的令牌。 但是,当我从XML文件加载密钥时,它可以工作!所以我假设导出的XML文件没问题。我不知道为什么会这样?然后我尝试导出导入的公钥并比较这些文件的内容。 它有所不同!

这个命令我用来从商店导出导入的公钥(用于文件内容比较):

C:\Windows\Microsoft.NET\Framework64\v4.0.30319>.\aspnet_regiis.exe -px MyContainer C:\PublicKey_exp.xml

当我从文件而不是从商店加载公钥时,它可以正常工作:

StreamReader sr = new StreamReader("C:\\PublicKey.xml");
String xml = sr.ReadToEnd();
sr.Close();

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(xml);

0 个答案:

没有答案