Azure Service Fabric and Azure Key Vault Secret Error



尝试从无状态服务结构实现 Azure 密钥保管库机密时,我得到以下情况,在控制台应用中工作得很好。

System.TypeLoadException
HResult=0x80131522
Message=Inheritance security rules violated by type: 'System.Net.Http.WebRequestHandler'. Derived types must either match the security accessibility of the base type or be less accessible.
Source=Microsoft.Rest.ClientRuntime
StackTrace:
at Microsoft.Rest.ServiceClient`1.CreateRootHandler
public async Task<string> GetAccessToken(string authority, string resource, string scope)
{
var clientId = MyConfig.Settings.Sections["MyConfigSection"].Parameters["AuthClientId"].Value;
var clientSecret = MyConfig.Settings.Sections["MyConfigSection"].Parameters["AuthClientSecret"].Value;
ClientCredential clientCredential = new ClientCredential(clientId, clientSecret);
var context = new AuthenticationContext(authority, TokenCache.DefaultShared);
var result = await context.AcquireTokenAsync(resource, clientCredential);
return result.AccessToken;
}
public string GetCRMConnectionString()
{
var secretvaultAddress = MyConfig.Settings.Sections["MyConfigSection"].Parameters["SecretVaultUrl"].Value;
var client = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetAccessToken));
return client.GetSecretAsync(secretvaultAddress).GetAwaiter().GetResult().Value;
}

WebRequestHandler 类型(在您的情况下创建其实例)是 System.Net.Http.WebRequest.dll 的一部分。如果您探索程序集的属性,您会发现应用于它的下一个属性 -

[程序集:允许部分信任的调用方]

此属性使程序集被视为安全透明。WebRequestHandler 派生自另一个程序集 - System.Net.Http.dll 中定义的 HttpClientHandler。因此,可能在部署代码的环境中,System.Net.Http.dll缺少AllowPartlyTrustedCallers,这使得它成为安全关键代码,这意味着规则被违反 - 透明代码不能调用安全关键代码。

尝试通过创建绑定规则到具有 AllowPartlyTrustedCallers 属性的特定 System.Net.Http.dll 版本来解决此问题,或者尝试显式创建 HttpClient 并将其传递到 KeyVaultClient ctr。

有关更多详细信息和选项 - 按类型违反的继承安全规则,请参阅此链接:"System.Net.Http.WebRequestHandler"。

最新更新