如何使用 安全地存储租户外部 API 凭据。NET7 / EF + SQL Server / Azure

How to store tenant external API credentials securely using .NET7 / EF + SQL Server / Azure

提问人:Lennart Hammarström 提问时间:8/19/2023 最后编辑:marc_sLennart Hammarström 更新时间:8/19/2023 访问量:57

问:

我的应用有多个租户,而这些租户又有多个用户。每个租户都使用多个外部 API 来收集数据并将其存储在我的服务中。我需要使用租户 API 凭据(用户名、密码)来访问这些外部服务。如何安全地做到这一点?

某种双向加密是解决这个问题的最佳方法吗?我现在的做法是将所有凭据保存在 Azure Keyvault 中,并使用如下所示的函数在我的代码中获取它们:

public record ApiCredentials(string UserName, string Password);

...

public static ApiCredentials GetApiCredentials(this IConfiguration configuration, 
                                               string tenantId,
                                               string credentialNamespace)
{
    return new ApiCredentials(
        configuration[$"{tenantId}-{credentialNameSpace}:Username"],
        configuration[$"{tenantId}-{credentialNameSpace}:Password"]);
}

虽然上述方法有效并且非常安全,但它感觉有点骇人听闻,我不确定我是否以正确的方式进行。

这方面有什么标准做法吗?

C# .NET Azure 安全性

评论

1赞 Fildor 8/19/2023
“我需要使用租户 API 凭据(用户名、密码)来访问这些外部服务。”- 你还能改变这个设计决定吗?你为什么不提供一个 api 来将他们的数据推送到?
0赞 Lennart Hammarström 8/20/2023
@Fildor我真的做不到。因此,为了获得更多上下文:我将不得不集成到四个不同的服务中,这些服务以不同的格式提供相同的数据,客户将随身携带这些数据。由于法律原因,我无法注册这些服务并向他们收取费用。因此,我需要创建一个 API 层,将所有这些 API 绑定到一个统一的 API 下,但我调用的服务将根据客户端与哪些服务达成协议而变化。
0赞 Fildor 8/20/2023
是的,那将是一个pia。但无论如何,如果我们谈论的是 Azure,除了 KeyVault 之外,我在任何地方都看不到凭据。
1赞 Lennart Hammarström 8/20/2023
是的。好吧,我想我与 Azure Keyvault 的集成将尽可能好。@Fildor

答: 暂无答案