Identity Server 4-IDX10630:PII隐藏

时间:2018-11-12 02:22:12

标签: c# rsa identityserver4 signing

我对使用加密和rsa令牌还很陌生,我正在尝试让IDentityServer4不使用developersigning,而是我自己的一种。到目前为止,这是我尝试过的:

var keyInfo = new RSACryptoServiceProvider().ExportParameters(true);
var rsaSecurityKey = new RsaSecurityKey(new RSAParameters
{
    D = keyInfo.D,
    DP = keyInfo.DP,
    DQ = keyInfo.DQ,
    Exponent = keyInfo.Exponent,
    InverseQ = keyInfo.InverseQ,
    Modulus = keyInfo.Modulus,
    P = keyInfo.P,
    Q = keyInfo.Q
});

services.AddIdentityServer()
.AddSigningCredential(rsaSecurityKey)
.AddInMemoryPersistedGrants()
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddInMemoryApiResources(Config.GetApiResources())
.AddInMemoryClients(Config.GetClients())
.AddAspNetIdentity<User>();

但是,当我运行Identity Server4并重定向到另一个网站的登录页面时,出现以下错误:

  

IDX10630:用于签名的“ [PII被隐藏]”不能小于“ [PII被隐藏]”位。 KeySize:“ [PII隐藏]”。   参数名称:key.KeySize

我不得不承认,我已经呆了整整一个周末,试图弄清楚如何使用SigningCredentials,但我不确定我在上面做错了什么。

2 个答案:

答案 0 :(得分:6)

通过在Startup类的Configure()中添加以下内容,可以查看开发中的更多详细信息:

if (env.IsDevelopment())
{
     IdentityModelEventSource.ShowPII = true; 
}

答案 1 :(得分:4)

对于遇到相同问题的人: ShowPII配置是全局设置的,它是IdentityModelEventSource的静态属性,例如可以在Startup类中设置。添加完之后,我可以看到它引发了InvalidIssuer异常以进行令牌验证。对我而言,这与我如何生成JWT以与我的API(受Identity Server 4保护)进行通信有关。我在URL:http://localhost:5002(在docker-compose网络外部)上生成令牌,这与我的API:http://<<docker-service-name>>中的URL Identity Server颁发者不同。因此,如果您使用docker-compose并设法将Identity Server用作同一docker-compose中的单独容器,请注意,您的身份验证应使用 IDENTICAL 颁发者生成令牌,该令牌用于您的API。