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 密钥文件 - 解析数字时遇到意外字符的主要内容,如果未能解决你的问题,请参考以下文章

Blazor学习之旅初步了解Blazor

Blazor 应用程序 /_blazor/disconnect 状态码 400

blazor 项目上的非 blazor 文件夹

Blazor学习之旅第一个Blazor应用

使用 Blazor 开发内部后台:了解 Blazor 组件

将 Blazor 组件渲染到现有 div(Blazor 无权访问)