- 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/
我通过 spring ioc 编写了一些 Rest 应用程序。但我无法解决这个问题。这是我的异常(exception): org.springframework.beans.factory.BeanC
我对 TestNG、Spring 框架等完全陌生,我正在尝试使用注释 @Value通过 @Configuration 访问配置文件注释。 我在这里想要实现的目标是让控制台从配置文件中写出“hi”,通过
为此工作了几个小时。我完全被难住了。 这是 CS113 的实验室。 如果用户在程序(二进制计算器)结束时选择继续,我们需要使用 goto 语句来到达程序的顶部。 但是,我们还需要释放所有分配的内存。
我正在尝试使用 ffmpeg 库构建一个小的 C 程序。但是我什至无法使用 avformat_open_input() 打开音频文件设置检查错误代码的函数后,我得到以下输出: Error code:
使用 Spring Initializer 创建一个简单的 Spring boot。我只在可用选项下选择 DevTools。 创建项目后,无需对其进行任何更改,即可正常运行程序。 现在,当我尝试在项目
所以我只是在 Mac OS X 中通过 brew 安装了 qt。但是它无法链接它。当我尝试运行 brew link qt 或 brew link --overwrite qt 我得到以下信息: ton
我在提交和 pull 时遇到了问题:在提交的 IDE 中,我看到: warning not all local changes may be shown due to an error: unable
我跑 man gcc | grep "-L" 我明白了 Usage: grep [OPTION]... PATTERN [FILE]... Try `grep --help' for more inf
我有一段代码,旨在接收任何 URL 并将其从网络上撕下来。到目前为止,它运行良好,直到有人给了它这个 URL: http://www.aspensurgical.com/static/images/a
在过去的 5 个小时里,我一直在尝试在我的服务器上设置 WireGuard,但在完成所有设置后,我无法 ping IP 或解析域。 下面是服务器配置 [Interface] Address = 10.
我正在尝试在 GitLab 中 fork 我的一个私有(private)项目,但是当我按下 fork 按钮时,我会收到以下信息: No available namespaces to fork the
我这里遇到了一些问题。我是 node.js 和 Rest API 的新手,但我正在尝试自学。我制作了 REST API,使用 MongoDB 与我的数据库进行通信,我使用 Postman 来测试我的路
下面的代码在控制台中给出以下消息: Uncaught DOMException: Failed to execute 'appendChild' on 'Node': The new child el
我正在尝试调用一个新端点来显示数据,我意识到在上一组有效的数据中,它在数据周围用一对额外的“[]”括号进行控制台,我认为这就是问题是,而新端点不会以我使用数据的方式产生它! 这是 NgFor 失败的原
我正在尝试将我的 Symfony2 应用程序部署到我的 Azure Web 应用程序,但遇到了一些麻烦。 推送到远程时,我在终端中收到以下消息 remote: Updating branch 'mas
Minikube已启动并正在运行,没有任何错误,但是我无法 curl IP。我在这里遵循:https://docs.traefik.io/user-guide/kubernetes/,似乎没有提到关闭
每当我尝试docker组成任何项目时,都会出现以下错误。 我尝试过有和没有sudo 我在这台机器上只有这个问题。我可以在Mac和Amazon WorkSpace上运行相同的容器。 (myslabs)
我正在尝试 pip install stanza 并收到此消息: ERROR: No matching distribution found for torch>=1.3.0 (from stanza
DNS 解析看起来不错,但我无法 ping 我的服务。可能是什么原因? 来自集群中的另一个 Pod: $ ping backend PING backend.default.svc.cluster.l
我正在使用Hibernate 4 + Spring MVC 4当我开始 Apache Tomcat Server 8我收到此错误: Error creating bean with name 'wel
我是一名优秀的程序员,十分优秀!