Blazor语言 - app.UseIdentityServer();使用.pfx密钥文件-解析数字时遇到意外字符



我已经创建了一个新的Blazor WebAssembly应用程序与个人用户帐户,存储用户帐户在应用程序和ASP。.NET Core托管在。NET 5。当将我的应用程序部署到Azure应用程序服务时,我得到以下错误:

对象引用未设置为Object .at的实例Microsoft.Extensions.DependencyInjection.IdentityServerBuilderConfigurationExtensions

阅读这些链接,我必须在IdentityServer的生产中提供我自己的证书:

Blazor Web Assembly App .Net Core hosting: publish runtime error

https://stackoverflow.com/a/56904000/3850405

https://learn.microsoft.com/en us/aspnet/core/security/authentication/identity - api - authorization?view=aspnetcore - 5.0 # example-deploy-to-azure-app-service

然后我创建了一个像这样的.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.csapp.UseIdentityServer();上失败,出现以下错误:

Newtonsoft.Json。JsonReaderException: '遇到意外字符解析number时:路径",第一行,位置1

根据微软文档我的证书应该是有效的:

用于签名令牌的生产证书。

  • 本证书无具体要求;可以是自签名证书,也可以是通过CA机构提供的证书。
  • 可以通过PowerShell或OpenSSL等标准工具生成。
  • 它可以安装到目标机器上的证书存储中,或者作为带有强密码的.pfx文件部署。

https://learn.microsoft.com/en us/aspnet/core/security/authentication/identity - api - authorization?view=aspnetcore - 5.0 #部署到生产

如果我像这样加载键,它可以工作:

"Key": {
"Type": "Store",
"StoreName": "My",
"StoreLocation": "CurrentUser",
"Name": "CN=blazortest"
}

我能够通过删除appsettings.Development.json中的IdentityServer条目来解决此问题。Development. json:

"IdentityServer": {
"Key": {
"Type": "Development"
}
} 

尝试将证书上传到Azure应用程序服务TLS/SSL设置中。然后将Type改为"Store",StoreName改为"My",StoreLocation改为"CurrentUser"并将Name转换为"CN="

然后重启app服务。

对于我的版本,我在这些文章的帮助下创建了一个自签名证书:

  • 步骤1~6:New-SelfSignedCertificate.
  • 步骤7~11:部署到App Service

这是我所做的完整步骤(可能有一些更快的方法,但这是我所做的原始步骤):

  1. 打开Powershell(作为Admin)
  2. 执行$cert = New-SelfSignedCertificate -Subject MyAppName你可以用你自己的MyAppName替换它,但是你需要记住它直到进程结束
  3. 执行命令$cert | Format-List -Property *(不确定是否需要)
  4. 我在Manage user certificates中搜索生成的证书。
  5. 事实证明,我不能导出它的文件,因为它是不受信任的,所以我把它移动到Trusted Root Certification > Certificates文件夹。
  6. 然后当我打开证书时,Detail选项卡中的Copy To File..变得可用,所以我这样做了。(我导出文件为base64 Cer文件)
  7. 我通过Azure门户打开应用服务资源
  8. 导航到TLS/SSL Settings
  9. Public Key Certificates (.cer)选项卡中上传.cer文件,名称为MyAppName(与我在powershell命令-Subject中输入的名称相同)
  10. 在你的应用程序的appsettings.json,确保你有以下设置:
"IdentityServer": {
"Key": {
"Type": "Store",
"StoreName": "My",
"StoreLocation": "CurrentUser",
"Name": "CN=MyAppName"
}
}
  1. 最后,我重新启动了App Service。

对于具有通用提供商的Blazor托管,开发类型密钥可能仍然会发出签名密钥,随着每次程序重新启动而更改。

. pfx文件不是通用主机的选项,因为身份服务器试图将私钥持久化到Windows Store中,而不是共享主机的选项,也不是直接放入Windows Store并从中检索的选项。

如果有可用的数据库,密钥存储提供者Microsoft.AspNetCore.DataProtection.EntityFrameworkCore并不难实现。按照实体框架核心密钥存储中的步骤与应用程序集成。

相关内容

  • 没有找到相关文章

最新更新