当前位置: 首页 > 知识库问答 >
问题:

Azure Service Fabric和Azure Key Vault秘密错误

宋臻
2023-03-14

当我试图从一个无状态服务实现Azure Key Vault Secret时,我得到了以下信息:从一个控制台应用程序实现Azure Key Vault Secret。

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;
        }

共有1个答案

惠野
2023-03-14

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

[程序集:AllowPartiallyTrustedCallers]

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

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

 类似资料:
  • 我成功地实现了在terraform中创建敏感资源的流程,在任何时候都不会透露敏感细节是什么,因此在我们的github repo中不会以纯文本存储。我让TF创建一个服务帐户,它与SA密钥相关,然后创建一个引用SA密钥输出的GCP密钥。 我现在想看看是否有任何方法可以对一些预定义的数据库密码执行相同的操作。流量会略有不同: 手动创建GCP secret(在secrets manager中),该密码的值

  • 我们在AWS环境中部署了完整的应用程序,我们发现AWS秘密管理器是存储数据库和其他一些组件的秘密的正确选择。

  • 我有麻烦管理詹金斯的秘密密码。我希望密码不显示在日志上,但我尝试了两种方法没有成功: 第一次尝试 我尝试使用全局凭据(不受限制)设置用户和pwd,如下所示: 我执行了: 但我可以在日志中看到,用户的写入是正确的,但pwd的写入方式与它的路径相同: 在我的自动测试中,也是通过输入完整路径而不是变量的值。 第二次尝试 我试着用这样的密文: 但控制台日志上显示的是原样的密码。 有人能帮我吗? 先谢谢你。

  • 我遇到了许多API,它们为用户提供了一个API密钥和一个秘密。但我的问题是:两者之间有什么区别? 在我看来,一把钥匙就足够了。假设我有钥匙,只有我和服务器知道。我用这个键创建了一个HMAC哈希,并进行了一个API调用。在服务器上,我们再次创建HMAC哈希,并将其与发送的哈希进行比较。如果是相同的,则呼叫经过身份验证。 那为什么要用两把钥匙呢? 编辑:或者该API密钥用于查找API机密?

  • 下面是我的python脚本,用于更新一个秘密,以便使用kubectl部署到kubernetes。所以它工作得很好。但是我想创建一个kubernetes cron作业,该作业将运行docker容器来更新kubernetes集群中的秘密。我该怎么做?aws的秘密只持续了12个小时,我必须从集群内重新生成,这样我就可以在吊舱崩溃等情况下拉动它。。。 这是我在kubernetes中可以访问的内部api吗?

  • 我创造了一个“其他类型的秘密”。我还在这个模板中添加了一个作为give的lambda函数。现在,当我试图立即旋转时,它会说“Fail to Rotion the secret”test_secret_Rothing“以前的旋转没有完成。将重新尝试该旋转。”轮转的时间是一天,即使第二天我看到分泌物也没有更新。我只是添加了那个lambda函数。我需要定义任何参数或任何其他lambda设置吗。我还在文档