身份认证服务器4 - IDX10630:PII已隐藏

33

我对加密和RSA令牌的使用还比较新,我正在尝试让IDentityServer4不使用开发人员签名,而是使用我的签名。到目前为止,我已经尝试了以下方法:

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,但我不确定自己上面做错了什么。


4
一个简单的解决方法是直接调用“[PII已隐藏]”,然后跟着使用“[PII已隐藏]”。 - President James K. Polk
@JamesKPolk 我不知道你的意思是什么。 - Bagzli
2
你可以查看隐藏的内容:https://github.com/IdentityServer/IdentityServer4/issues/2186#issuecomment-407959886 - user4864425
2个回答

86

您可以通过将以下内容添加到Startup类中的Configure()方法中,以在开发过程中查看更多细节:

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

它帮了很大的忙。 - Sérgio S. Filho
你怎么设置它?我正在使用SharePoint插件中的asp.net。 - Burre Ifort
1
这是IdentityModelEventSource的静态属性。它可以在任何你想要设置的地方进行设置。 - Iuri Brindeiro

6
对于那些遇到相同问题的人: ShowPII配置是全局设置,它是IdentityModelEventSource的一个静态属性,可以在Startup类中进行设置。一旦我添加了它,我就可以看到它为令牌验证抛出了InvalidIssuer异常。对我来说,这与我如何生成用于与我的API通信的JWT有关(该API受Identity Server 4保护)。我是通过url生成令牌的:http://localhost:5002(在docker-compose网络之外),这与我API内部使用的Identity Server发行方的url:http://<<docker-service-name>>不同。所以,如果您正在使用docker-compose,并设法在同一docker-compose中将Identity Server用作单独的容器,请注意您的身份验证应该生成具有与API中使用的完全相同发行方的令牌。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接