我已经创建了一个新的Blazor WebAssembly应用程序与个人用户帐户,应用程序内存储用户帐户和ASP。NET Core托管在。NET 5。将应用部署到Azure应用服务时,我收到以下错误:
对象引用未设置为 www.example.com DependencyInjection.IdentityServerBuilderConfigurationExtensions
阅读这些链接时,我必须在IdentityServer的生产环境中提供自己的证书:
Blazor Web Assembly App .Net Core Hosted: publish runtime error
https://stackoverflow.com/a/56904000/3850405
www.example. com
然后我创建了一个像这样的.pfx
文件,我已经验证了它的工作原理和我的密码是正确的。
https://stackoverflow.com/a/48790088/3850405
然后,我将.pfx
文件放在我的Server
项目根文件夹中,并将Copy to Output Directory
标记为Copy Always
。
然后我更新了appsettings.json
,看起来像这样:
"IdentityServer": {
"Clients": {
"BlazorTest.Client": {
"Profile": "IdentityServerSPA"
}
},
"Key": {
"Type": "File",
"FilePath": "localhost.pfx",
"Password": "MySercurePassword123?"
}
},
现在,该项目既不能在本地也不能在Azure上工作。在Startup.cs
中的app.UseIdentityServer();
上失败,错误如下:
Newtonsoft.Json.JsonReaderException:'分析数字时遇到意外字符:�. Path '',line 1,position 1.”
根据Microsoft文档,我的证书应该是有效的:
用于签名令牌的生产证书。
- 本证书无具体要求;它可以是自签名证书或通过CA授权提供的证书。
- 它可以通过PowerShell或OpenSSL等标准工具生成。
- 它可以安装到目标计算机上的证书存储中,也可以部署为。具有强密码的pfx文件。
www.example. com
如果我像这样加载密钥,它就可以工作:
"Key": {
"Type": "Store",
"StoreName": "My",
"StoreLocation": "CurrentUser",
"Name": "CN=blazortest"
}
3条答案
按热度按时间pftdvrlh1#
我可以通过删除 appsettings中的IdentityServer条目来修复此问题。发展。json。
从appsettings中删除以下行。发展。json:
edqdpe6u2#
尝试将证书上传到Azure App Service TLS/SSL设置中。然后将
Type
更改为“Store”,StoreName
更改为“My”,StoreLocation
更改为“CurrentUser”,Name
更改为“CN=”。然后重新启动应用程序服务。
对于我的版本,我在这些文章的帮助下创建了一个自签名证书:
这是我做的完整步骤(可能有一些更快的方法,但这是我做的原始步骤):
1.打开Powershell(作为管理员)
1.执行
$cert = New-SelfSignedCertificate -Subject MyAppName
。* 您可以将MyAppName替换为您自己的,但您需要记住它,直到过程结束 *1.执行命令
$cert | Format-List -Property *
(不确定是否需要)1.我在
Manage user certificates
中搜索生成的证书。1.原来,我不能导出它到文件,因为它是 * 不可信 *,所以我把它移到
Trusted Root Certification > Certificates
文件夹。1.然后,当我打开证书时,
Detail
选项卡中的Copy To File..
变为可用,所以我这样做了。(我将文件导出为base64 Cer文件)1.我通过Azure门户打开应用服务资源。
1.导航至
TLS/SSL Settings
1.在
Public Key Certificates (.cer)
选项卡中上传了名为MyAppName
的.cer
文件(与我在powershell命令-Subject中输入的名称相同)1.在应用程序的
appsettings.json
中,确保您具有以下设置:1.最后,我重新启动了App Service。
3bygqnnd3#
对于使用通用提供程序托管的Blazor,开发类型密钥仍然可以发出随着每次程序重新启动而改变的签名密钥。
.PFX文件不是通用托管的选项,因为身份服务器尝试将私钥持久化到Windows应用商店-不是共享托管下的选项,也没有直接放入Windows应用商店并从中检索的选项。
如果有可用的数据库,则密钥存储提供程序Microsoft.AspNetCore.DataProtection.EntityFrameworkCore不难实现。按照Entity Framework Core Key Storage中的步骤与应用程序集成。