代码之家  ›  专栏  ›  技术社区  ›  Ogglas

变量-应用程序。UseIdentityServer();带有.pfx密钥文件-解析数字时遇到意外字符

  •  0
  • Ogglas  · 技术社区  · 4 年前

    我创建了一个具有个人用户帐户、在应用程序中存储用户帐户和ASP的新DateTimeWebAssembly应用程序。NET Core托管在中。网5。将我的应用部署到Azure应用服务时,我收到以下错误:

    对象引用未设置为对象的实例。at 微软。扩展。依赖注射。IdentityServerBuilderConfigurationExtensions

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

    Blazor Web Assembly App .Net Core Hosted: 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上运行。它失败了 app.UseIdentityServer(); 在里面 Startup.cs 出现以下错误:

    Newtonsoft。Json。JsonReaderException:'遇到意外字符 在解析数字时:。路径“”,第1行,位置1

    根据Microsoft文档,我的证书应该是有效的:

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

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

    https://learn.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"
    }
    
    0 回复  |  直到 4 年前
        1
  •  2
  •   Chris Berlin    3 年前

    我通过删除中IdentityServer的条目解决了这个问题 应用程序设置。开发.json .

    从appsettings中删除以下行。 发展 .json:

    "IdentityServer": {
         "Key": {
           "Type": "Development"
         }
       } 
    
        2
  •  0
  •   VJPPaz    2 年前

    尝试将证书上载到Azure应用服务TLS/SSL设置中。 然后更改 Type 进入“商店”, StoreName 进入“我的”, StoreLocation 到“当前用户”和 Name 转换为“CN=”。

    然后重新启动应用程序服务。

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

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

    1. 打开Powershell(以管理员身份)
    2. 执行 $cert = New-SelfSignedCertificate -Subject MyAppName . 您可以用自己的MyAppName替换它,但需要记住它,直到过程结束
    3. 执行命令 $cert | Format-List -Property * (不确定是否需要)
    4. 我在中搜索了生成的证书 Manage user certificates .
    5. 原来我无法将其导出到文件,因为它是 不信任 所以我把它移到了 Trusted Root Certification > Certificates 文件夹。
    6. 然后,当我打开证书时 Copy To File.. 在里面 Detail 标签页变得可用,于是我照做了。(我将文件导出为base64 Cer文件)
    7. 我通过Azure门户打开应用服务资源。
    8. 引导到 TLS/SSL Settings
    9. 上传了 .cer 文件在 Public Key Certificates (.cer) 带有名称的选项卡 MyAppName (与我在powershell命令中放入的内容相同-主题)
    10. 在the appsettings.json 对于您的应用程序,请确保您具有以下设置:
    "IdentityServer": {
      "Key": {
        "Type": "Store",
        "StoreName": "My",
        "StoreLocation": "CurrentUser",
        "Name": "CN=MyAppName"
      }
    }
    
    1. 最后,我重新启动了应用程序服务。
    推荐文章