[英]How do I keep/store my azure credentials?
我有这个 web 应用程序,它访问存储在 Azure 云中的密钥库。
要访问此 KeyVault,我使用 IConfigurationBuilder 扩展
configuration.AddAzureKeyVault(new Uri(KeyvaultUri), new DefaultAzureCredential(true));
我为所有需要访问它的用户创建了一个托管身份,这意味着他们应该能够运行应用程序并在通过 SSO 登录后访问密钥库,目前他们每次启动时都必须这样做应用程序由于new DefaultAzureCredential(true)
我不明白的是为什么每次都需要每次请求它,而不是在输入一次后将凭据存储在某个地方,并使用该存储的凭据,我可以以某种方式在本地存储所需的初始登录后的凭据?
当一个人启动他们的应用程序时总是登录有点不方便,并且调试应用程序变得有点冗长,需要登录。
是否有可能让登录在后台进行 - 或者以某种方式在首次登录后存储凭据?
我觉得这有点偏离轨道——我正在寻找的解决方案应该适用于那些通过终端在 visual studio 之外运行解决方案的人。 例如前端开发人员——他们只需要一个后端来提出请求,别无其他。
缓存令牌是没有意义的,因为它在启动时只使用一次,您要寻找的是在您的凭据中排除您试图获取令牌以连接到您的 AKV 的所有错误方式,除了您真正的方式使用。
要正确配置它并且不要在启动时等待 15 秒,您应该以这种方式配置DefaultAzureCredentials :
DefaultAzureCredential credentials = new DefaultAzureCredential(new DefaultAzureCredentialOptions
{
ExcludeEnvironmentCredential = true,
ExcludeInteractiveBrowserCredential = true,
ExcludeAzurePowerShellCredential = true,
ExcludeSharedTokenCacheCredential = true,
ExcludeVisualStudioCodeCredential = true,
ExcludeVisualStudioCredential = true,
ExcludeAzureCliCredential = true,
ExcludeManagedIdentityCredential = false,
});
排除除您正在使用的令牌之外的所有获取令牌的可能性,在本例中为“托管身份”或在其他情况下为 AzureCliCredentials。
问候。
你能分享一个完整的小代码示例吗? 使用DefaultAzureCredentialOptions
怎么样。 像:
.ConfigureAppConfiguration((context, config) =>
{
var appSettings = config.Build();
var credentialOptions = new DefaultAzureCredentialOptions();
var credential = new DefaultAzureCredential(credentialOptions);
config.AddAzureKeyVault(new Uri(appSettings["Url:KeyVault"]), credential);
})
我假设你有不同的 Azure subs for non-prod 和 prod(包含一个 non-prod 和 prod key vault 实例)。
在非产品密钥保管库实例中,使用所需成员(即开发人员 AAD 帐户)创建新角色分配。
如果您使用的是DefaultAzureCredential ,这些成员将能够在 Visual Studio 或 Visual Studio Code(或 EnvironmentCredential)中利用 Azure 服务身份验证,因为 DefaultAzureCredential 将循环使用这些不同的凭据类型,分别包括 VisualStudioCredential 和 VisualStudioCodeCredential(和 EnvironmentCredential)。
开发人员可以在他们的 IDE 中进行身份验证,例如在 Visual Studio 中,通过转到Tools > Options > Azure Service Authentication
,他们可以在其中使用他们的 Azure 凭据进行身份验证。
假设他们的 AAD 帐户已被授予访问(非生产)密钥保管库实例的权限,他们将能够获得访问权限。
已部署的应用程序(大概在 Azure 中运行)将使用不同的凭证类型,例如 ManagedIdentityCredential 或 EnvironmentCredential。 鉴于这些也由 DefaultAzureCredential 处理,因此无需更改代码即可使其适用于您的应用程序的已部署实例。
与 prod 密钥保管库实例的唯一区别是您可能不会为开发人员帐户创建角色分配。
我正在寻找的解决方案应该适用于那些通过 visual studio 之外的终端运行解决方案的人。 例如前端开发人员——他们只需要一个后端来提出请求,别无其他。
对于只想从终端运行应用程序的这些类型的用户,他们可以设置一些环境变量,这些变量将被EnvironmentCredential (这是 DefaultAzureCredential 中包含的另一种凭证类型)获取,例如,如果他们正在运行docker 中的应用程序,他们可以指定AZURE_USERNAME
和AZURE_PASSWORD
环境变量(或者AZURE_CLIENT_ID
和AZURE_CLIENT_SECRET
以获得更多“机器”上下文),例如docker run -e AZURE_USERNAME=username -e AZURE_PASSWORD=password...
根据您的问题,我假设如下:
new DefaultAzureCredential(true)
只是获取用户当前的凭据。 这将是前端用户。 这些是根据您组织的安全策略自动缓存的。 我认为这是正常工作的。
作为开发人员,登录频率不受您的控制。 您遇到的问题出在 Azure Active Directory 的组织设置中。 您的登录频率可能设置为以下之一:
要解决您的问题,请将登录频率设置为低于该频率,您应该没问题。 (我无权访问此文件,否则我会发布更好的图片)
以下是有关如何执行此操作的完整文章的链接:
这就是我要找的
https://github.com/Azure/azure-sdk-for.net/issues/23896
静默身份验证步骤,在第一次将凭据输入缓存文件时存储凭据,然后在第二次重新运行应用程序时重新使用它,而不提示用户输入凭据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.