Blazor - app.UseIdentityServer();使用 .pfx 密钥文件 - 解析数字时遇到意外字符
Posted
技术标签:
【中文标题】Blazor - app.UseIdentityServer();使用 .pfx 密钥文件 - 解析数字时遇到意外字符【英文标题】:Blazor - app.UseIdentityServer(); with .pfx key file - Unexpected character encountered while parsing number 【发布时间】:2021-06-01 12:18:47 【问题描述】:我创建了一个新的 Blazor WebAssembly 应用,其中包含个人用户帐户、应用内存储用户帐户和托管在 .NET 5 中的 ASP.NET Core。将我的应用部署到 Azure 应用服务时出现以下错误:
对象引用未设置为 object.at 的实例 Microsoft.Extensions.DependencyInjection.IdentityServerBuilderConfigurationExtensions
阅读这些链接,我必须在生产中为 IdentityServer 提供我自己的证书:
Blazor Web Assembly App .Net Core Hosted: publish runtime error
https://***.com/a/56904000/3850405
https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-api-authorization?view=aspnetcore-5.0#example-deploy-to-azure-app-service
然后我创建了一个像这样的.pfx
文件,我已经验证它可以工作并且我的密码是正确的。
https://***.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: '遇到意外字符 解析数字时:�。路径'',第 1 行,位置 1。'
根据 Microsoft 文档,我的证书应该是有效的:
用于签署令牌的生产证书。
此证书没有具体要求;它可以是自签名证书或通过 CA 机构提供的证书。 可以通过 PowerShell 或 OpenSSL 等标准工具生成。 它可以安装到目标计算机上的证书存储中,也可以部署为具有强密码的 .pfx 文件。https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-api-authorization?view=aspnetcore-5.0#deploy-to-production
如果我像这样加载密钥,它可以工作:
"Key":
"Type": "Store",
"StoreName": "My",
"StoreLocation": "CurrentUser",
"Name": "CN=blazortest"
【问题讨论】:
错误“Newtonsoft.Json.JsonReaderException: '解析数字时遇到意外字符:�.Path '', line 1, position 1.'”通常是当您的客户无法联系公众时发现端点 JSON 文档。你确定那个正在运行吗? (/.well-known/openid-configuration) 并且可以从客户端访问? @ToreNestenius 是的,在appsettings.json
中使用"Type": "Store"
时,代码完全相同。
但在部署中,您有不同的网络拓扑,确定身份服务器在 Azure 中是可访问的吗?如果我没记错的话,你有一些关于 HTTP 与 HTTPS 的问题。 AppServices 在外部终止 HTTPS,所以你的服务只获得 HTTP 流量?
@ToreNestenius 我在本地遇到了同样的错误,所以我认为这不是这种情况下的罪魁祸首。在本地,应用程序设置为Enable SSL
,并像往常一样在 localhost 上使用 HTTPS 端口自动启动。在 Azure 上,我在 mysite.azurewebsites.net 上遇到了同样的错误。
@ToreNestenius 我认为这不是问题所在。如果我从 Store
而不是 .pfx
File
获取相同的证书,它适用于 localhost 和 Azure。看看微软所说的这应该没有效果,如上所述:这个证书没有具体要求;它可以是自签名证书或通过 CA 机构提供的证书。它可以通过 PowerShell 或 OpenSSL 等标准工具生成。它可以安装到目标机器上的证书存储中,也可以部署为具有强密码的 .pfx 文件。
【参考方案1】:
我能够通过删除 appsettings.Development.json 中的 IdentityServer 条目来解决此问题。
从 appsettings.Development.json 中删除以下行:
"IdentityServer":
"Key":
"Type": "Development"
【讨论】:
很奇怪,对我也有用。 在aspnetcore
Github 中创建了一个问题:github.com/dotnet/aspnetcore/issues/37244以上是关于Blazor - app.UseIdentityServer();使用 .pfx 密钥文件 - 解析数字时遇到意外字符的主要内容,如果未能解决你的问题,请参考以下文章