如何为在 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=如果您还没有证书,请在 Powershell 中创建一个新证书 Administrator
:
New-SelfSignedCertificate -DnsName "blazortest" -CertStoreLocation "cert:\CurrentUser\My"
然后我使用mmc.exe
将证书导出为.pfx
文件。
如果您在IIS
上托管,则需要将.pfx
证书导入Local Computer
的Personal
文件夹,然后选择Manage Private Keys...
并授予运行Application Pool
的用户访问权限。
来自其他线程的完整答案,IdentityServerBuilderConfigurationExtensions
发布异常:
https://***.com/a/66448397/3850405
【讨论】:
以上是关于如何为在 IIS 上运行的 aspnet 核心应用程序在 appsettings.json 中配置 IdentityServer 的关键设置的主要内容,如果未能解决你的问题,请参考以下文章
如何为通过 SSL 进行双向身份验证的本地测试创建客户端证书?
如何为托管在 Azure 上的 Web 应用程序和托管在窗口的 IIS 服务器上的 Web 应用程序使用相同的自定义域?