为何本地运行应用需等待1小时才能访问受PIM保护的Azure资源?
排查.NET 8 Blazor Server访问PIM保护Azure资源的凭据缓存问题
1. 清理本地Azure凭据缓存
直接删除本地持久化的令牌缓存文件,这些文件会存储旧的、无权限的令牌:
- Windows:删除
%USERPROFILE%\.azure\tokens.json和%USERPROFILE%\.azure\msal.cache - macOS/Linux:删除
~/.azure/tokens.json和~/.azure/msal.cache
删除后重启Rider并重新登录Azure账号,验证是否能立即访问资源。
2. 调整Azure SDK的令牌缓存策略
在应用配置中,禁用令牌的持久化缓存,强制每次启动应用时重新获取令牌:
var credential = new DefaultAzureCredential(new DefaultAzureCredentialOptions { TokenCachePersistenceOptions = new TokenCachePersistenceOptions { DisablePersistence = true } }); // 初始化App Configuration客户端 var appConfigClient = new AzureAppConfigurationClient(new Uri("你的App Configuration终结点"), credential); // 初始化Key Vault客户端 var secretClient = new SecretClient(new Uri("你的Key Vault终结点"), credential);
3. 重置Rider的Azure会话
- 打开Rider的
File > Settings > Tools > Azure,找到已登录的账号,点击Sign Out后重新登录 - 若仍有问题,删除Rider的Azure凭据缓存目录:
- Windows:
%USERPROFILE%\.JetBrains\Rider\<你的版本号>\config\plugins\Azure\credentials - macOS:
~/Library/Application Support/JetBrains/Rider/<你的版本号>/config/plugins/Azure/credentials
删除目录内文件后重启Rider。
- Windows:
4. 验证令牌的权限有效性
用Azure CLI获取当前令牌并检查权限:
- 获取App Configuration的令牌:
az account get-access-token --resource https://azure.microsoft.com/ - 获取Key Vault的令牌:
az account get-access-token --resource https://vault.azure.net
将返回的accessToken复制到本地的jwt.ms解析,查看roles声明中是否包含你激活的PIM角色。如果没有,执行az account clear清除CLI缓存后重新登录Azure,再重新激活PIM角色。
5. 启用Azure SDK的详细日志
在Program.cs中添加日志配置,捕获令牌获取的详细过程:
builder.Logging.AddFilter("Azure.Core", LogLevel.Debug); builder.Logging.AddFilter("Azure.Identity", LogLevel.Debug);
运行应用后,查看日志中关于令牌来源(缓存/新获取)、过期时间的信息,确认是否是旧缓存令牌导致的权限问题。
6. 清理系统级凭据缓存
- Windows:打开
控制面板 > 用户账户 > 凭据管理器 > Windows凭据,删除所有包含Azure或Microsoft Azure的凭据条目 - macOS:打开
钥匙串访问,搜索Azure相关条目并删除
完成后重新登录Azure账号,再运行应用。
内容的提问来源于stack exchange,提问作者bertenvdb
相关产品推荐
相关产品推荐

