Identity Server 4-在非开发环境中使用带有AddDeveloperSigningCredential的自



我在我们所有的环境(开发、测试、生产(中都使用Identity Server 4(.Net Core 2.2(,我们的启动如下

services.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddAspNetIdentity<ApplicationUser>()
.AddInMemoryClients(Configuration.GetSection("IdentityServer:Clients"))
.AddConfigurationStore(Configuration.GetSection("CosmosDB"))
.AddOperationalStore(Configuration.GetSection("CosmosDB"))
.AddProfileService<ProfileService>();
  • 这使用在调试/开发环境(tempkey.RSA(中生成的临时RSA密钥文件

这目前正在运行-用户已通过身份验证并处理索赔

我意识到,在本地/开发之外的任何其他环境中都不建议这样做,但我们即将从ADFS-3迁移到ADFS-4,这将改变架构,因此我们将不再需要上述代码(也可能不需要我们的Identity Server 4实例(

我也意识到的解决方案存在局限性

  • 单个/多个实例(如果是这种情况,则同一RSA密钥需要在多个实例之间同步(
  • 还有一个问题是tempkey.rsa在互联网上的可见性-它所在的文件夹不能通过互联网提供服务

但是,我有一些问题,如果ADFS端的证书被更新(可能在我们迁移之前发生(,会发生什么?如果发生这种情况,

  • 现有用户JWT会失效吗
  • 我看不到任何地方有旧的(或可能是新的(ADFS证书的指纹——它应该在哪里注册吗
  • 据我所知,RSA密钥不会过期,对吗

您永远不应该在生产中使用AddDeveloperSigningCredential,因为在重新部署时(取决于您的设置(可能会丢失密钥,如果发生这种情况,则会生成新的签名密钥。这反过来意味着所有已经发行的代币都将失效。

更好的方法是使用AddSigningCredential方法并将密钥存储在IdentityServer之外。

当您进行密钥轮换时,您可以保留旧密钥以验证已发行的令牌,然后使用AddValidationKey添加重新分配的旧签名密钥。

参见https://docs.duendesoftware.com/identityserver/v5/fundamentals/keys/

是的,RSA签名密钥没有任何过期时间,但是,有时您会将RSA密钥封装并传输到证书中,然后添加日期/时间组件。

最新更新