如何为在 IIS 上运行的 aspnet 核心应用程序在 appsettings.json 中配置 IdentityServer 的关键设置

Posted

技术标签:

【中文标题】如何为在 IIS 上运行的 aspnet 核心应用程序在 appsettings.json 中配置 IdentityServer 的关键设置【英文标题】:How to configure key settings for IdentityServer in appsettings.json for aspnet core app running on IIS 【发布时间】:2019-07-29 01:24:04 【问题描述】:

我使用以下命令创建了具有授权支持的模板 Angular / ASP.NET Core:

dotnet new angular --auth Individual

这是一个:

ASP.NET Core 3.0 应用与 用于验证和存储用户的 ASP.NET Core Identity, IdentityServer4 用于实现 Open ID Connect, Angular SPA,

所有预配置都可以协同工作。

在基于此模板部署我的应用程序之前,我尝试先将此模板应用程序部署到 IIS。

我已将应用程序部署到 IIS 并设置了数据库,并且应用程序连接到它就好了,但我卡住了。我不确定如何创建和配置用于签署令牌的生产证书。

this point in the Microsoft docs 简要提及“用于签署令牌的生产证书”。并给出部署到 Azure 的示例。

如何在 IIS 中创建密钥?你在这里做点什么吗?

那么我该如何将正确的设置添加到 appsettings.json 中?

"IdentityServer": 
  "Key": 
    "Type": "Store",
    "StoreName": "My",
    "StoreLocation": "CurrentUser",
    "Name": "CN=MyApplication"
  

我正在努力在网上找到任何指南或示例,我们将不胜感激任何帮助或指出正确方向。

【问题讨论】:

解决“异常信息:System.InvalidOperationException:在 'LocalMachine\Personal' 上找不到主题为 'test' 的有效证书”错误单击开始按钮打开并键入“Certmgr.msc”或“管理计算机证书”并检查您的证书存储在哪个部分。 所以这似乎向我展示了Certificates - Current User,我可以在Trusted Root Certification Authorities 下找到我制作的名为test 的服务器证书......但是设置Type: Store, StoreName: Trusted Root Certification Authorities, StoreLocation CurrentUser, Name: test 也不起作用。 ..同样的错误。 :// 【参考方案1】:

我还发现文档不够全面。我设法将一个角度应用程序部署到天蓝色。我不确定它是否类似于部署到 IIS。但这可能会帮助您找到解决问题的方法。

部署到 Azure:

首先,您必须将(自签名)证书 (.pfx) 上传到 azure 应用服务。我使用本指南创建自签名证书。

上传证书图片

您还必须通过将指纹添加到应用程序设置中来使证书可用。见图片。

不要忘记更新您的 appsettings.json,以便您的应用可以访问上一步中的证书。

"IdentityServer": 
  "Key": 
    "Type": "Store",
    "StoreName": "My",
    "StoreLocation": "CurrentUser",
    "Name": "CN=yourApp-domain.com"
  

如果遇到问题。将 appservice 中的环境变量更改为“Development”以查看错误的详细信息。像这样。

更改环境变量

【讨论】:

在我的例子中,由于我托管 Identity 的 API 在子域下,我必须设置 CN=*.domain.com。【参考方案2】:

目前我已经通过将证书导出到文件来解决这个问题。 在 IIS 中的服务器证书下,您可以右键单击证书并将其导出。

然后你可以配置appsettings.json中的关键参数来引用一个文件,如下:

"Key": 
  "Type": "File",
  "FilePath": "..\\test.pfx",
  "Password": "Test"

我仍然想引用商店证书。

【讨论】:

你在哪里找到这部分配置的文档? 嘿丹,我实际上不记得我在哪里找到这样做的......可能不是来自官方文档,我不记得它在任何时候都涵盖过这个。但是查看我发现的这篇 reddit 帖子,它更多地概述了关键参数设置:reddit.com/r/aspnetcore/comments/bmq2n3/…【参考方案3】:

因此,出于开发目的,这应该相当简单地配置。在 IIS 中,您可以为自己颁发一个自签名证书,该证书自然仅在您的本地计算机上有效。

给它起个名字,如果您不更改任何其他内容并单击“确定”,默认情况下它会将生成的证书存储在您的 Personal 存储中以供 LocalMachine 使用,因此下面的配置应该可以工作:

"IdentityServer": 
  "Key": 
    "Type": "Store",
    "StoreName": "Personal",
    "StoreLocation": "LocalMachine",
    "Name": "YourName"
  

值得注意的是,如果您尝试从其他地方导入证书 - 对于 Identity Server 4 目的,它必须至少是 2048 位密钥。

【讨论】:

感谢您提供的信息,我会试一试...但我问的是生产版本需要什么? 我确实试了一下并收到以下错误...Exception Info: System.InvalidOperationException: Couldn't find a valid certificate with subject 'test' on the 'LocalMachine\Personal' 啊好吧我错了,搜索不是通过公共友好名称,而是通过主题,只需双击 IIS 中的证书,转到详细信息选项卡并找到主题并使用它。让我知道这是否有效。 我可以看到证书有一个主题参数,不幸的是仍然没有运气。在证书名称中包含和不包含“CN=”(主题?) 我可以使用上述建议,但我需要将 StoreName 设置为“My”而不是“Personal”,即使我使用的证书存储在 Personal。如上述评论中所述,您还需要使用 'CN=' (不需要 .local)。您也可以打开证书并查看主题,它应该显示 CN=.【参考方案4】:

如果您还没有证书,请在 Powershell 中创建一个新证书 Administrator

New-SelfSignedCertificate -DnsName "blazortest" -CertStoreLocation "cert:\CurrentUser\My"

然后我使用mmc.exe 将证书导出为.pfx 文件。

如果您在IIS 上托管,则需要将.pfx 证书导入Local ComputerPersonal 文件夹,然后选择Manage Private Keys... 并授予运行Application Pool 的用户访问权限。

来自其他线程的完整答案,IdentityServerBuilderConfigurationExtensions 发布异常:

https://***.com/a/66448397/3850405

【讨论】:

以上是关于如何为在 IIS 上运行的 aspnet 核心应用程序在 appsettings.json 中配置 IdentityServer 的关键设置的主要内容,如果未能解决你的问题,请参考以下文章

如何为通过 SSL 进行双向身份验证的本地测试创建客户端证书?

如何为托管在 Azure 上的 Web 应用程序和托管在窗口的 IIS 服务器上的 Web 应用程序使用相同的自定义域?

可以通过 VS2015 在 IIS 中调试/运行 aspnet5 应用程序

如何为本地主机测试运行设置虚拟目录?

如何用.net来解析asp后缀的页面

如何为不同的应用程序运行相同的 SpringBootTests