c# - AzureKeyVault 在本地 ASP.NET 4.7.1 WebForms 应用程序中不起作用
问题描述
尝试将 Azure KeyVault 集成到本地 ASP.NET 4.7.1 WebForms 应用程序并使用 CertificateSubjectName 作为 SPN 进行身份验证,但失败了。我什至在示例应用程序中重现了这一点。我有一个 ASP.NET 4.7.1 + AngularJS 应用程序,它在那里运行良好。不确定 WebForms 有什么特别之处。有人可以帮忙吗?以下是错误截图:
以下是 StackTrace 的更多详细信息:
Stack Trace:
[AzureServiceTokenProviderException: Parameters: Connectionstring: RunAs=App;AppId=************;TenantId=************;CertificateSubjectName=CN=#####, OU=###, O=#####, L=#####, S=Virginia, C=US;CertificateStoreLocation=LocalMachine, Resource: https://vault.azure.net, Authority: https://login.windows.net/*****************. Exception Message: Tried 1 certificate(s). Access token could not be acquired.
Exception for cert #1 with thumbprint XXXXXXXXXXXXXXXXXXX: Object reference not set to an instance of an object.]
Microsoft.Azure.Services.AppAuthentication.<GetAccessTokenAsyncImpl>d__14.MoveNext() +1943
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +102
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +64
Microsoft.Azure.KeyVault.<PostAuthenticate>d__9.MoveNext() +422
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +102
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +64
Microsoft.Azure.KeyVault.<ProcessHttpRequestAsync>d__10.MoveNext() +1113
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +102
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +64
System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) +26
Microsoft.Azure.KeyVault.<GetSecretsWithHttpMessagesAsync>d__66.MoveNext() +2018
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +102
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +64
Microsoft.Azure.KeyVault.<GetSecretsAsync>d__49.MoveNext() +272
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +102
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +64
Microsoft.Configuration.ConfigurationBuilders.<<GetAllKeys>b__17_0>d.MoveNext() +161
[AggregateException: One or more errors occurred.]
System.AggregateException.Handle(Func`2 predicate) +5434660
Microsoft.Configuration.ConfigurationBuilders.AzureKeyVaultConfigBuilder.GetAllKeys() +582
Microsoft.Configuration.ConfigurationBuilders.AzureKeyVaultConfigBuilder.Initialize(String name, NameValueCollection config) +563
System.Configuration.ConfigurationBuildersSection.CreateAndInitializeBuilderWithAssert(Type t, ProviderSettings ps) +309
这是web.config
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
https://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<configSections>
<section name="configBuilders" type="System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" restartOnExternalChanges="false" requirePermission="false" />
</configSections>
<configBuilders>
<builders>
<add name="AzureKeyVault" vaultName="****-kv" connectionString="RunAs=App;AppId=*********;TenantId=*******;CertificateSubjectName=CN=**********-KV, OU=****, O=*********, L=*******, S=Virginia, C=US;CertificateStoreLocation=LocalMachine" type="Microsoft.Configuration.ConfigurationBuilders.AzureKeyVaultConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Azure, Version=1.0.0.0, Culture=neutral" />
</builders>
</configBuilders>
<appSettings configBuilders="AzureKeyVault">
<add key="foo-setting" value="" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.7.1" />
<httpRuntime targetFramework="4.7.1" />
<pages>
<namespaces>
<add namespace="System.Web.Optimization" />
</namespaces>
<controls>
<add assembly="Microsoft.AspNet.Web.Optimization.WebForms" namespace="Microsoft.AspNet.Web.Optimization.WebForms" tagPrefix="webopt" />
</controls>
</pages>
</system.web>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" />
<bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
</configuration>
这是packages.config
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Antlr" version="3.5.0.2" targetFramework="net471" />
<package id="AspNet.ScriptManager.bootstrap" version="3.4.1" targetFramework="net471" />
<package id="AspNet.ScriptManager.jQuery" version="3.4.1" targetFramework="net471" />
<package id="bootstrap" version="3.4.1" targetFramework="net471" />
<package id="jQuery" version="3.4.1" targetFramework="net471" />
<package id="Microsoft.AspNet.FriendlyUrls" version="1.0.2" targetFramework="net471" />
<package id="Microsoft.AspNet.FriendlyUrls.Core" version="1.0.2" targetFramework="net471" />
<package id="Microsoft.AspNet.ScriptManager.MSAjax" version="5.0.0" targetFramework="net471" />
<package id="Microsoft.AspNet.ScriptManager.WebForms" version="5.0.0" targetFramework="net471" />
<package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net471" />
<package id="Microsoft.AspNet.Web.Optimization.WebForms" version="1.1.3" targetFramework="net471" />
<package id="Microsoft.Azure.KeyVault" version="2.3.2" targetFramework="net471" />
<package id="Microsoft.Azure.KeyVault.WebKey" version="2.0.7" targetFramework="net471" />
<package id="Microsoft.Azure.Services.AppAuthentication" version="1.0.1" targetFramework="net471" />
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="2.0.1" targetFramework="net471" />
<package id="Microsoft.Configuration.ConfigurationBuilders.Azure" version="1.0.2" targetFramework="net471" />
<package id="Microsoft.Configuration.ConfigurationBuilders.Base" version="1.0.1" targetFramework="net471" />
<package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="3.14.2" targetFramework="net471" />
<package id="Microsoft.Rest.ClientRuntime" version="2.3.8" targetFramework="net471" />
<package id="Microsoft.Rest.ClientRuntime.Azure" version="3.3.7" targetFramework="net471" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net471" />
<package id="Modernizr" version="2.8.3" targetFramework="net471" />
<package id="Newtonsoft.Json" version="12.0.2" targetFramework="net471" />
<package id="WebGrease" version="1.6.0" targetFramework="net471" />
</packages>
解决方案
推荐阅读
- android - Firebase:子事件侦听器似乎会重新加载添加的每个子对象的所有数据
- amazon-s3 - Airflow S3Hook 对象没有属性 load_bytes
- vbscript - 从具有特定值的 Parent 下的 XML 文件中获取子节点的计数
- python - Python中的字符串对象表示
- java - 为什么我在java中有这个错误
- python - 最小化权重矩阵 Keras 中非零元素的数量
- hyperledger-fabric - Azure Hyperledger Fabric:与网络交互
- python - 没有python对象的cython中的高效矩阵运算
- javascript - 谷歌可视化的多色折线图
- swift - 如何使用 Swift 通过我的应用在业务页面的“访客帖子”上发帖