小编zol*_*a25的帖子

KeyVaultErrorException:操作返回无效的状态代码'Forbidden'

我正在尝试设置我的Web应用程序,托管在Azure中以从Azure KeyVault读取设置.

我一直在关注这个指南:https://anthonychu.ca/post/secrets-aspnet-core-key-vault-msi/

该示例显示了如何使用以下配置从KeyVault访问应用程序设置:

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
     .ConfigureAppConfiguration((ctx, builder) =>
     {
         var keyVaultEndpoint = Environment.GetEnvironmentVariable("KEYVAULT_ENDPOINT");
         if (!string.IsNullOrEmpty(keyVaultEndpoint))
         {
             var azureServiceTokenProvider = new AzureServiceTokenProvider();
             var keyVaultClient = new KeyVaultClient(
                 new KeyVaultClient.AuthenticationCallback(
                     azureServiceTokenProvider.KeyVaultTokenCallback));
             builder.AddAzureKeyVault(
                 keyVaultEndpoint, keyVaultClient, new DefaultKeyVaultSecretManager());
         }
     })
    .UseApplicationInsights()
    .UseStartup<Startup>()
    .Build();
Run Code Online (Sandbox Code Playgroud)

我已将KEYVAULT_ENDPOINT环境变量添加到应用程序设置中.我在应用服务上启用了MSI,并且我已经从密钥保管库访问策略中授权了我的Azure用户和我的应用程序:

在此输入图像描述

使用获取和列表操作:

在此输入图像描述

而且我已经将密钥添加到密钥保险库中了.在本地运行,我可以访问这个秘密.

但我的ASP .NET Core站点在stdout日志中启动失败:

Unhandled Exception: Microsoft.Azure.KeyVault.Models.KeyVaultErrorException: Operation returned an invalid status code 'Forbidden'
   at Microsoft.Azure.KeyVault.KeyVaultClient.GetSecretsWithHttpMessagesAsync(String vaultBaseUrl, Nullable`1 maxresults, Dictionary`2 customHeaders, CancellationToken cancellationToken)
   at Microsoft.Azure.KeyVault.KeyVaultClientExtensions.GetSecretsAsync(IKeyVaultClient operations, String vaultBaseUrl, Nullable`1 maxresults, …
Run Code Online (Sandbox Code Playgroud)

azure azure-web-sites azure-keyvault asp.net-core

12
推荐指数
1
解决办法
2万
查看次数

将 Key Vault 设置绑定到类

在 ASP.NET Core 中,如果从 JSON app.settings 文件读取配置,我可以将一个部分绑定到这样的对象:

services.Configure<MyPocoConfig>(Configuration.GetSection("Section"))
Run Code Online (Sandbox Code Playgroud)

是否有一种直接的方法可以使用从 Azure Key Vault 读取的一组设置来执行此操作?我正在遵循此处的 MSDN 文档中所述的指南https://docs.microsoft.com/en-us/azure/key-vault/vs-key-vault-add-connected-service#access-your-secrets-代码内

我可以像这样手动映射它们:

services.Configure<MyPocoConfig>(myPoco =>
                {
                    myPoco.Option1 = Configuration["Option1"];
                    myPoco.Option2 = Configuration["Option2"];
                });
Run Code Online (Sandbox Code Playgroud)

我只是想知道是否有一种方法可以自动映射它们,因为它适用于存储在 app.settings JSON 中的配置。我确信它可以通过反射来完成,但我希望有一种内置的方式。

我尝试使用文章中描述的 category--setting 语法将设置放入一个类别中,并使用 阅读它们services.Configure<MyPocoConfig>(Configuration.GetSection("category")),但这不起作用。

编辑:

目前可能的2020年使用类别把设置成一个类别-设置语法和阅读他们像services.Configure<MyPocoConfig>(Configuration.GetSection("category"))

azure-keyvault asp.net-core

9
推荐指数
1
解决办法
1392
查看次数

IHttpContextAccessor Session GetString

我正在尝试使用.NET Core运行时将ASP.NET MVC站点迁移到ASP.NET Core.以前我们可以从会话存储中获取对象,即使在不同的程序集中也是如此

var obj = HttpContext.Current.Session[key]
Run Code Online (Sandbox Code Playgroud)

现在我已经读过了我们必须注入IHttpContextAccessor并使用_contextAccessor.HttpContext.Session上的方法.但是Session对象的方法已经改变,并且不再应用索引.

我在其他问题中看过人们使用HttpContext.Session.GetString()和HttpContext.Session.SetString():

访问HttpContext.Current

有了这些,我至少可以取消/序列化我想要获取/获取的对象.但我在界面上找不到这些方法.

'ISession'不包含'GetString'的定义,并且没有可以找到接受类型'ISession'的第一个参数的扩展方法'GetString'

如何访问这些方法?

c# .net-core asp.net-core

8
推荐指数
1
解决办法
2985
查看次数

如何从本地运行的Docker容器访问Azure Keyvault?

我有一个包含ASP.NET Core应用程序的docker映像,该应用程序使用Azure Key保管库访问诸如连接字符串之类的东西。在本地运行映像时,出现以下错误:

Unhandled Exception: Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException: Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/[guid]. Exception Message: Tried the following 3 methods to get an access token, but none of them worked.
Parameters: Connection String: [No connection string specified], Resource: https://vault.azure.net, Authority: https://login.windows.net/[guid]. Exception Message: Tried to get token using Managed Service Identity. Unable to connect to the Managed Service Identity (MSI) endpoint. Please check that you are running on an Azure resource that has MSI setup.
Parameters: …
Run Code Online (Sandbox Code Playgroud)

azure docker azure-cli azure-keyvault asp.net-core

7
推荐指数
2
解决办法
973
查看次数

表达式中的EF Core 3 x.Contains(),其中x是ICollection

我有以下数据层设置:

public class Repository : IRepository {

    private readonly MyDbContext _dbContext;

        public List<Meter> Search(Expression<Func<Meter,bool>> criteria)
            IQueryable<Meter> results = _dbContext.Meters;
            return results.Where(criteria).ToList();
        }
    }
}

... from a client class:

IRepository _repository;

public void ClientMethod () {

    ICollection<int> ids = new List<int>() {1, 2, 3);
    var results = _repository.Search(c=> ids.Contains(c.Id)); // This throws exception

}
Run Code Online (Sandbox Code Playgroud)

这导致异常:

表达式where(source:DbSet,predicate:(m)=>(Unhandled parameter:__ids_0).Contains(m.Id))'无法翻译。以可以翻译的形式重写查询,或者通过插入对AsEnumerable(),AsAsyncEnumerable(),ToList()或ToListAsync()的调用来显式切换到客户端评估

但是,如果我将集合引用更改为IEnumerable或List,它将起作用:

public void ClientMethod () {

    // This works
    List<int> ids = new List<int>() {1, 2, 3);
    var results = _repository.Search(c=> ids.Contains(c.Id)); 

    // …
Run Code Online (Sandbox Code Playgroud)

entity-framework-core ef-core-2.1 ef-core-3.0

3
推荐指数
2
解决办法
506
查看次数

将Pandas DataFrame转换为对象列表

我想将Pandas DataFrame转换为对象列表。

这是我的课:

class Reading:

    def __init__(self):
        self.HourOfDay: int = 0
        self.Percentage: float = 0
Run Code Online (Sandbox Code Playgroud)

我阅读了.to_dict,所以我尝试了

df.to_dict(into=Reading)
Run Code Online (Sandbox Code Playgroud)

但它回来了

TypeError: unsupported type
Run Code Online (Sandbox Code Playgroud)

我不需要元组列表或字典列表,但不需要阅读列表。到目前为止,我发现的每个问题似乎都与这两种情况有关。但是我想要自己的类型化对象。

谢谢

python dataframe pandas

2
推荐指数
3
解决办法
2287
查看次数