- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从 .NET 4.7
连接到 Azure Key Vault 实例。应用程序在 IIS 和调试器 (Visual Studio 2022 17.4.4
) 下本地运行,但遇到了来自 Azure.Identity
的以下异常当调用执行 KeyVault 操作(例如 GetSecretAsync()
时)尝试检索 token 以向 Azure 进行身份验证时包.
DefaultAzureCredential failed to retrieve a token from the includedcredentials. See the troubleshooting guide for more information.https://aka.ms/azsdk/net/identity/defaultazurecredential/troubleshoot
- ManagedIdentityCredential authentication unavailable. Multiple attempts failed to obtain a token from the managed identity endpoint.
- Visual Studio Token provider can't be accessed at C:\WINDOWS\system32\config\systemprofile\AppData\Local.IdentityService\AzureServiceAuth\tokenprovider.json
我需要在云环境(例如生产环境)中通过用户分配的托管标识连接到 KeyVault 实例,而在开发环境中,我们因此需要通过开发人员的 Visual Studio 帐户进行连接,以对他们进行身份验证以访问服务,类似地。也许我误解了,但我相信通过 DefaultAzureCredential
这是可能的。选项,它将按顺序尝试各种身份验证方法(例如环境变量、托管标识、Visual Studio 凭据等),直到成功为止。
在检查与 Visual Studio 凭据流相关的内部异常时,我看到 System.Exception {System.IO.DirectoryNotFoundException}
异常消息状态...
"Could not find a part of the path 'C:\WINDOWS\system32\config\systemprofile\AppData\Local.IdentityService\AzureServiceAuth\tokenprovider.json'.
此前,该消息曾表述过以下消息(据我所知,这是该文件的最新位置),直到我尝试在 Visual Studio 2019 下运行进行比较,此时,它更改为上述消息。
"Could not find a part of the path C:\Users[AppPoolName]\AppData\Local.IdentityService\AzureServiceAuth\tokenProvider.json".
起初,我注意到 .IdentityService
中的路径不存在继续,因此遵循了关于此 MSFT forum post 的建议恢复AppAuthentification
从 VS2019 扩展到 VS2022 的配置以恢复 C:\Users\<AppPoolName>\AppData\Local\.IdentityService\AzureServiceAuth\tokenprovider.json
文件和提供者 TokenProviders
作为 C:\Program Files (x86)\Microsoft Visual Studio\<version>\Enterprise\Common7\IDE\Extensions\<random dir name>\TokenService\Microsoft.Asal.TokenService.exe
的路径。在下一个版本中,我注意到 .IdentityService
已创建,但未创建正在进行的目录或文件。
然后,我多次尝试注销并登录 Visual Studio,但这似乎并没有创建剩余的丢失目录和文件。手动创建目录和文件当然可以解决 System.IO.DirectoryNotFoundException
,但错误消息随后通知我文件架构不正确。我无法找到具有正确架构和值的示例。
就客户端配置选项而言,我已明确将身份验证流程模式限制为 ManagedIdentity
和VisualStudioCredential
为简单起见,在注意到其他方法后(例如 AzureCLI
和 Azure PowerShell Module` 也失败了,尽管已登录)。
_client = new SecretClient(new Uri(options.KeyVaultUri), new DefaultAzureCredential(
new DefaultAzureCredentialOptions
{
ExcludeManagedIdentityCredential = false,
ExcludeVisualStudioCredential = false,
ExcludeInteractiveBrowserCredential = true,
ExcludeAzurePowerShellCredential = true,
ExcludeAzureCliCredential = true,
ExcludeEnvironmentCredential = true,
ExcludeVisualStudioCodeCredential = true,
ExcludeSharedTokenCacheCredential = true,
ManagedIdentityClientId = options.ManagementIdentityClientId
}
));
我也尝试过 Azure SDK GitHub Issue #4590 上的建议设置 setProfileEnvironment
和loadUserProfile
至true
如果这是 IIS 权限问题,但这没有什么区别 - 相同的错误仍然存在。
最后,我找到的唯一其他引用文献 tokenProvider.json
文件位于 Microsoft's documentation for App Authentication ,但 Tools > Options > Azure Service Authentication
中不存在重新验证按钮按照建议的窗口。
"If you run into problems using Visual Studio, such as errors thatinvolve the token provider file, carefully review the preceding steps.
You may need to reauthenticate your developer token. To do so, selectTools > Options, and then select Azure Service Authentication. Lookfor a Re-authenticate link under the selected account. Select it toauthenticate."
因为我能够找到C:\Program Files (x86)\Microsoft Visual Studio\<version>\Enterprise\Common7\IDE\Extensions\<random dir name>\TokenService\Microsoft.Asal.TokenService.exe
及其相关的配置文件,我怀疑是缺少tokenProvider.json
文件就是问题所在,但我不知道是什么负责创建该文件,也不知道它应该包含什么。
任何见解或指示将不胜感激。
著名的软件包及其使用的版本:
正如人们所期望的那样,我可以通过在 Azure AD 应用程序注册的 Key Vault 上授予 RBAC 记录,然后使用 ClientSecretCredential
来配置替代流程。流代替 DefaultAzureCredentials
流(如下)。但这并不能以最好的方式解决问题,所以如果有人能发现我在 DefaultAzureCredentials
上出错的地方,我会很感兴趣。流动,如果有的话。
_client = new SecretClient(new Uri(options.KeyVaultUri),
new ClientSecretCredential(options.TenantId, options.ClientId, options.Secret)
);
最佳答案
发现this question on SO ,我发现tokenProvider.json
存在于 C:\Users\<local user account>
下的同一目录中(通过 %LOCALAPPDATA%.IdentityService\AzureServiceAuth\
)并能够对其进行分析以供引用并将其复制到问题中提到的 IIS 目录。
根据Johnny5的建议,看来VisualStudioCredentials
以登录域用户身份执行,但 IIS 以 ApplicationPoolIdentity
身份运行,因此它不会访问域用户位置下的文件,也不会创建文件,因为它未登录到 Visual Studio。经过对如何更改此设置的一些研究后,我能够将 IIS 应用程序池身份设置为与登录的 Visual Studio 帐户匹配的域用户。
为此,请按照以下步骤操作
IIS Manager
> 前往Application Pools
Advanced Settings...
Identity
旁边的三点按钮设置(可能 ApplicationPoolIdentity
)Custom Account
并输入您的凭据(包括任何域前缀 - 例如 DOMAIN\MyUser
)如果您不确定自己的域,请打开命令提示符并输入 echo %USERDOMAIN%
找到它。
然后我设置 SecretClient
身份验证流程返回利用DefaultAzureCredential
像这样,在本地重新测试,并成功 - 检索到 secret 。
_client = new SecretClient(new Uri(options.KeyVaultUri), new DefaultAzureCredential(
new DefaultAzureCredentialOptions()
{
ExcludeEnvironmentCredential = true,
ExcludeVisualStudioCodeCredential = true,
ExcludeAzureCliCredential = true,
ExcludeAzurePowerShellCredential = true,
ExcludeSharedTokenCacheCredential = true,
ExcludeInteractiveBrowserCredential = true,
ExcludeManagedIdentityCredential = false,
ExcludeVisualStudioCredential = false,
ManagedIdentityClientId = options.ManagementIdentityClientId,
}));
关于c# - DefaultAzureCredetials 无法通过 Visual Studio 进行身份验证 - 找不到 AzureServiceAuth\tokenProvider.json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75086474/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!