.NET Core 6带Angular和Identity的启动应用部署Azure App Service遇证书错误
解决Azure App Service部署IdentityServer时的签名凭证错误
本地运行时,IdentityServer默认会自动使用开发环境的临时证书,所以不会有问题。但部署到Azure生产环境后,必须配置有效的签名凭证,否则就会抛出InvalidOperationException: No signing credential is configured by the 'IdentityServer:Key' configuration section.错误。
不需要强制让本地和Azure使用同一个证书,本地可以继续用开发证书,Azure单独配置生产证书,这样更灵活。具体操作步骤如下:
1. 在Azure App Service配置私钥证书
- 两种选择:
- 直接在Azure购买并管理证书,或者上传自己已有的PFX格式证书
- 进入App Service的TLS/SSL设置 -> 私钥证书(.pfx),完成证书的添加/上传
- 记录证书的指纹(Thumbprint),注意去掉指纹中的空格,后续配置要用到
2. 配置App Service的应用设置
进入App Service的配置 -> 应用程序设置,添加以下配置项:
IdentityServer__Key__Type:值设为StoreIdentityServer__Key__StoreName:值设为MyIdentityServer__Key__StoreLocation:值设为CurrentUserIdentityServer__Key__Name:值设为刚才记录的证书指纹(无空格)
3. 适配本地与生产环境的代码/配置
方式一:通过代码环境判断配置
在Program.cs中针对开发环境和生产环境做区分,本地继续用默认开发证书,生产环境读取Azure配置:
builder.Services.AddIdentityServer() .AddApiAuthorization<ApplicationUser, ApplicationDbContext>(options => { if (!builder.Environment.IsDevelopment()) { options.Key = new KeyDefinition { Type = builder.Configuration["IdentityServer:Key:Type"], StoreName = builder.Configuration["IdentityServer:Key:StoreName"], StoreLocation = builder.Configuration["IdentityServer:Key:StoreLocation"], Name = builder.Configuration["IdentityServer:Key:Name"] }; } }) .AddPersistedGrants() .AddDefaultTokenProviders();
方式二:通过环境配置文件区分
- 保留
appsettings.json的默认开发配置,无需修改 - 在
appsettings.Production.json中添加生产环境的证书配置:
{ "IdentityServer": { "Key": { "Type": "Store", "StoreName": "My", "StoreLocation": "CurrentUser", "Name": "你的证书指纹(无空格)" } } }
如果确实需要本地和Azure使用同一个证书,可将本地开发证书导出为PFX格式(设置密码),上传到Azure后,本地也通过配置文件指定该证书路径和密码即可,但开发环境没必要这么做,用默认临时证书更便捷。
内容的提问来源于stack exchange,提问作者mo_maat
相关产品推荐
相关产品推荐

